莫队算法学习小记

莫队

传说中能解决一切区间问题的算法,前国家队队长莫涛版权所有
不是队列之类的数据结构
其实就是个优雅的大暴力


暴力技巧

我们已经知道区间 [ L , R ] 的答案,想要知道区间 [ L ± 1 , R ± 1 ] 的答案
如果我们能用 O ( 1 ) 的时间暴力转移算出答案,就可以用莫队了

大部分区间问题都可以用线段树来做,有的不行
比如询问区间内同种颜色的数量,线段树很难做
但是可以用莫队做(仅限离线


分块大法好

说莫队是暴力因为它用排序+分块降低时间复杂度

  • 把原序列分成 n 个块,每个块大小为 n

  • 离线读入所有区间操作的左端点 L 和右端点 R

  • L 所在块的编号为第一关键字、 R 本身为第二关键字升序排序操作

  • 然后每次从上一个区间暴力计算即可

好像很好理解?因为本来莫队就不太难打
理论复杂度为 O ( n n ) 真正复杂度为 O ( )
反正 O ( n l o g 2 n ) 的题基本都能切


例题1:


带修莫队

猜你喜欢

转载自blog.csdn.net/enjoy_pascal/article/details/80963274
今日推荐