莫队学习小计

莫队能处理的东西

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

莫队是什么

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

算法思路

  • 一道例题(入门):

给定一个序列,求[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)
  • 当B=n2/3时,O(n5/3)

在这里插入图片描述

树上莫队

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

随便说说

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

例题

  • JZOJ3360苹果树(树上莫队)

我学习的blog

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值