莫队小记

莫队

考虑一个经典的问题。对一个数列进行 m 次区间求和。暴力需要 O(nm),但是莫队可以优化到 O(nm)

思想具有启发式思维。假如我们知道 [l,r] 的和为 k。在此基础上 [l1,r],[l,r+1] 都可以很快得到。莫队是对上一个问题解决这个问题。要给对问题的求解一个顺序,否则 l,r 的移动在最坏情况都是 n。用分块的思想排序,设块长为 len。把 l 的块编号按第一关键字,r 为第二关键字排序。这样,l 移动次数为 len×mr 移动次数为 n2len。均值不等式求得 len=n2m在莫队中,块长对于复杂度有决定性的作用

总之记住一句话:莫队只是改变了询问的顺序,让暴力跑的更快。

小优化

  1. 对于块编号 id,使用数组存储。
  2. 对于奇数块,r 升序;偶数块,r 降序。

回滚莫队

很多时候我们只方便在加(减)的时候统计答案。以下考虑只加不减。

回观普通莫队,对于每次询问。l 都可能减。但是只要还在一个块。r 只会增加。

我们需要在每次询问时,将 l 只加不减。修改为当前块的右端点 +1。在当前块变化时,将 r 修改为当前块的右端点。

然后按照普通莫队求解,但是这时候 l 的操作是临时的,不要覆盖可以重复使用的区间答案。按照普通莫队的分析方法可证复杂度 O(nm)

例题 JOISC 2014 Day1 历史研究.

树上莫队

一般都是将树的括号序跑下来。在这上面做莫队。例题:COT2 - Count on a tree II

带修莫队

其实就是增加了一维时间。

二次离线莫队

本文作者:cjrqwq

本文链接:https://www.cnblogs.com/yfzqwq/p/18165631

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   cjrqwq  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
展开
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.