莫队学习小计

莫队能处理的东西

  • 离线区间问题
  • 易对答案进行撤销或增加操作

莫队是什么

  • 莫队就是通过排序和分块所优化的暴力,为根号算法(数据结构???)

算法思路

  • 一道例题(入门):

给定一个序列,求[l,r]有多少个不同的正整数

  • 考虑将序列分块,块大小为Sqrt(n),将操作区间的左端点所在块为第一关键字排序,右端点为第二关键字排序。
  • 每一个块中有若干个左端点,右端点为升序排列。
  • 设两个指针i,j分别表示当前答案所表示区间的左端点和右端点,指针j单调递增,指针i暴力在块内左右扫,维护答案。
  • 直到[i,j]按顺序完全和所问区间吻合,并记录答案。
  • 时间复杂度:i在块内对于每一个l最多跳sqrt(n),共l次,故sqrt(n)*n次,跨越块的类似。j对于每一个块都左往右扫了一遍序列,共sqrt(n)*n。所以总复杂度为O(sqrt(n)*n)
  • 思路简单,代码简短。

带修莫队

  • 多了一维时间戳,有修改操作依旧暴力去改。将l,r所在块为第一第二关键字排序,将时间戳t单调递增。跟上面的暴力做法完全一样,下面是时间复杂度证明
    (From:https://www.cnblogs.com/ouuan/p/MoDuiTutorial.html)

在这里插入图片描述

树上莫队

  • 将树上的子树查询或路径查询通过DFS序或欧拉序转化为区间问题。
  • 再通过朴素的莫队解决即可

随便说说

  • 其实我并没有打过莫队,因为只能用莫队做的题目着实不多,经常用其他的算法代替。
  • 但思想上学习一下还是可以的。
  • 希望以后可以碰到一些莫队的题目。

例题

  • JZOJ3360苹果树(树上莫队)

我学习的blog

https://www.cnblogs.com/WAMonster/p/10118934.html
https://www.cnblogs.com/ouuan/p/MoDuiTutorial.html

posted @ 2019-07-10 22:38  Deep_Thinking  阅读(76)  评论(0编辑  收藏  举报