莫队学习笔记
所有内容均可见 OI-Wiki 莫队,下面是一些稍带思维的题目
普通莫队
考虑把信息转成前缀的异或形式,则求 \(s_r \oplus s_{l-1} = k\) 的个数,考虑莫队中增加一个数,那么分两种情况
-
增加最左边的数 \(p\),那么对答案的贡献为 \(x \in [l,r],s_x = s_{p-1} \oplus k\) 的 \(x\) 个数,计数数组维护即可
-
增加最右边的数 \(p\),那么对答案的贡献为 \(x \in [l,r],s_{x-1} = s_p \oplus k\) 的 \(x\) 个数,同理
删除操作同理
回滚莫队
暴力莫队 \(\Omicron(n \sqrt n \log n)\),无法通过,瓶颈在于单次操作无法做到 \(\Omicron(1)\)
我们发现用静态双链表做删除操作非常容易,于是考虑只删回滚莫队
发现仍然不好处理 add 操作,通过观察可以发现,由于我们只删回滚莫队的特征,可以将 add 看作 del 的撤销操作,那么我们只需在 del 时保留原来 pos 位置上的信息,add 时再还原就行

浙公网安备 33010602011771号