回滚莫队的技巧

Posted cszmc2004

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回滚莫队的技巧相关的知识,希望对你有一定的参考价值。

这个技巧我要记住,免得忘了。

回滚莫队用于解决插入难,删除易或者删除难,插入易的问题。

需要一个数据结构支持插入,撤销,就是希望里的“可回退化数据结构”。

对于删除难,插入易的问题,在排序的时候,第一个关键字是左端点所在块升序,第二个关键字是右端点升序。

每次延展右端点(这是单调的),记录答案放在变量p中,再创建一个变量q,其值=p,在延展时顺便统计p,然后再延展左端点,更新q,则答案就是q。

然后把上面延展左端点时的贡献撤销到当前块的下一个块首。

对于删除易,插入难的问题,在排序的时候,第一个关键字是左端点所在块升序,第二个关键字是右端点降序。

如果和上一个询问不一样,把当前的数据结构设为整个数列。左边的删到块尾+1,右边的也删到块尾+1,再拓展块头/尾,最后把左端点拓展到块头,右端点拓展到n。把只拓展右端点的答案记为ans[r]

每个询问,把左边的部分加到l,再用当前答案和ans[r]更新询问答案。

然后把上面延展左端点时的贡献撤销到当前块的下一个块首。

 

以上是关于回滚莫队的技巧的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 620F Xors on Segments 回滚莫队 + 字典树 || 离心询问分治 + 可持久化字典树

bzoj 4241历史的研究

回滚莫队

算法笔记莫队算法(基础莫队,带修莫队,回滚莫队,树上莫队,二次离线莫队)

bzoj4241/AT1219 历史研究(回滚莫队)

历史研究(回滚莫队)(add)