25.5.24 闲话:观虫我
维护长度为 \(2^n\) 的 \(\mathtt{01}\) 序列,\(q\) 次操作,每次单点翻转或者求子集和 \(\bmod 2\)。
数据范围:\(n\le 32\),\(q\le 10^6\)。
记录一个看到的 \(\mathcal O(q^2/w+q2^{n/4})\)。
考虑前面一次对 \(x\) 的操作对一次对 \(y\) 的询问的影响,显然若 \(x\subseteq y\) 则答案会翻转 \(1\)。
将二进制为拆成 \(b\) 段,将操作每 \(64\) 个压成一块,维护 \(f_{i,j,k}\) 表示第 \(k\) 块中哪些操作满足二进制第 \(i\) 段中是 \(j\) 的子集。
修改时枚举 \(i,j\) 直接改;查询时枚举 \(k\),将每段中的信息按位与起来就得到了有贡献的操作。
复杂度 \(\mathcal O(b2^{n/b})-\mathcal O(qb/w)\),取 \(b=4\) 可以通过。code。
如果拓展到不模 \(2\),看起来要查询一个块内某个子集所有元素的加量和,可能只能压 \(16\) 位,那就几乎等于 \(\mathcal O(q^2)\) 了。

浙公网安备 33010602011771号