题面 传送门 题解 lxl大毒瘤 我们考虑莫队,在移动端点的时候相当于我们需要快速计算一个区间内和当前数字异或和中\(1\)的个数为\(k\)的数有几个,而这个显然是可以差分的,也就是\([l,r]\)的询问可以拆成\([1,r]-[1,l-1]\) 我们考虑莫队移动指针的过程,以\([l,r]\)移动左指针到\(p\)为例,要减去的答案是\(l\)和\([1,r]-[1,l-1]\),\(l+1\)和\([1,r]-[1,l]\),...,总的来说,我们我们要对于\([1,r]\)这个前缀计算…
题目大意: 给定一个长度为\(n\)的序列\(a\),\(k\),和\(m\)次询问. 每次询问给定区间\([l,r]\),求满足\(l\leqslant i< j\leqslant r\)且\(\_\_ \text{builtin}\_ \text{popcount} (a_i\oplus a_j)=k\)的数对\((i,j)\)的个数. 40MB. 解题思路: 二次离线莫队lxl黑科技. 对于一次询问\([l,r]\),我们考虑右端点往右移动一格后变成\([l,r+1]\),多出来的数其实是…
题意: 给你一个序列,每次询问l,r问多少个a[i]^a[j]有k个1,k固定. 序列长度1e5,a[i]<=2^14 时限1s,空间40M 题解: 个人其实开始没什么思路,看了题解也好久,题解写得十分差,让人看了一头雾水. 首先想法就是莫队, 我们想暴力的话,可以把每个时间的状态考虑,res[i][j]表示前1-i个,和j xor 有k个1的个数 这样前后维护两个,就解决了. 空间限制怎么办,考虑莫队复杂度是N √M,就缩小了空间,就ok1了.…
洛谷题目传送门 具体思路看别的题解吧.这里只提两个可能对常数和代码长度有优化的处理方法. I 把一个询问拆成\(9\)个甚至\(16\)个莫队询问实在是有点珂怕. 发现询问的一边要么是一个区间,要么是\([1,n]\)挖去一个区间. 记\(pre_i=f_{[1,i],[1,n]}\),这个可以一遍预处理求出来. 简单容斥一下: \[f_{[l,r],[1,L)\cup(R,n]}=f_{[l,r],[1,n]}-f_{[l,r],[L,R]}=pre_r-pre_{l-1}-f_{[l,r],…
题目: 洛谷 5398 当我刚学莫队的时候,他们告诉我莫队能解决几乎所有区间问题: 现在,当我发现一个区间问题似乎难以用我所了解的莫队解决的时候,他们就把这题的正解叫做 XXX 莫队.--题记 (以上皆为瞎扯,纯属虚构,请勿当真) 分析: 先转化一下题目:如果允许每次询问都暴力把区间扫一遍,那么每扫到一个数 \(i\) ,就统计已经扫过的部分中有多少个 \(j\) 满足 \(a_j\) 是 \(a_i\) 的因数(即取数对 \((i,j)\) )或倍数 (即取数对 \((j,i)\) ).注意,…
题面传送门 莫队二次离线 mol ban tea,大概是这道题让我第一次听说有这东西? 首先看到这类数数对的问题可以考虑莫队,记 \(S\) 为二进制下有 \(k\) 个 \(1\) 的数集,我们实时维护一个桶 \(cnt_i\) 表示当前区间中值为 \(i\) 的数有多少个,那么加入一个数 \(v\) 的时候,答案会增加 \(\sum\limits_{y\in S}cnt_{y\oplus v}\),这样暴力莫队复杂度是 \(n\sqrt{n}\dbinom{14}{k}\),如果你过了我请你…
sto \(lxl\) orz 考虑莫队,每次移动端点,我们都要询问区间内和当前数字异或有 \(k\) 个 \(1\) 的数字个数 询问 \([l,r]\) 可以再次离线,拆成询问 \([1,l-1]\) 和 \([l,r]\) 然后考虑莫队要移动 \([l,r]\) 的 \(l\) 到 \(p\) 假设 \(p>l\) 那么相当于每次询问 \(a[l]\) 和 \([l+1,r]\),然后 \(++l\) 直到 \(l=p\) 即每次询问 \(a[l]\) 和 \([1,l]\) ,\(a[l…
题目链接 题意 区间两数异或在二进制下有 \(k\) 个 \(1\) 的对数. Sol 普通莫队的话,如果要实时维护好区间内的答案需要支持区间对一个数求答案. 直接做不是很好做,容易发现其实这也就是一个区间询问.那么可以把莫队中要求的东西再次离线下来. 我们把上述询问拆成前缀相减的形式,这样我们要做到就是多次询问一个前缀对一个数的答案. 由于在数据范围下二进制下有 \(k\) 个 \(1\) 的数并不是太多,我们可以直接从前往后做,遇到一个数 \(x\) 则把 \(x\oplus number(…
点此看题面 大致题意: 有\(N\)只从\(1\sim N\)编号的袜子,告诉你每只袜子的颜色,\(M\)组询问,每组询问给你一个区间\([L\sim R]\),让你求出小Z随机抽出\(2\)只袜子时有多大概率抽到两只颜色相同的袜子. 题意转换 假设这些袜子中共有\(K\)种颜色,则对于第\(i\)种颜色的袜子,抽到两次的概率为\[\frac{cnt[i]*(cnt[i]-1)}{(R-L+1)*(R-L)}\] 那么,在整个区间中抽到两只相同颜色的袜子的概率就是\[\sum_{i=1}^K\f…
题面 传送门 题解 维包一生推 首先请确保您会二次离线莫队 那么我们现在的问题就是怎么转移了,对于\(i\)和前缀\([1,r]\)的贡献,我们拆成\(b_i\)和\(c_i\)两部分,其中\(b_i\)表示\(i\)的因数个数,\(c_i\)表示\(i\)的倍数个数 \(c_i\)非常好处理,插入\(a_i\)的时候直接暴力枚举它的所有因子\(d\),并令\(c_d++\)就好了,预处理之后复杂度上界是\(O(\sqrt{n})\)的 然而\(b_i\)就显得非常辣手--因为如果\(b_i\)…