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)\) 了。

posted @ 2025-05-28 09:15  喵仔牛奶  阅读(30)  评论(0)    收藏  举报