【概述】
莫队算法(mo's algorithm)是用来解决离线区间不修改询问问题,可以将复杂度优化到 O(n^1.5),除去普通的莫队算法外,还有带修改的莫队、树上莫队等等。
莫队常用于维护区间答案,比如:对于一个长度为 n 的序列,给出 m 次询问,每次询问区间 [l,r] 内有多少个不同的颜色,其中 n,m<=100000.
对于一个序列,当知道 [L,R] 的信息时,可在 O(1) 的时间复杂度内求出 [L-1,R]、[L,R-1]、[L+1,R]、[L,R+1] 的信息,其思想基础是两个询问之间的状态跳转。
其本质是利用分治的思想,分块排序优化暴力搜索,减少搜索区间之间的覆盖长度,从而优化时间复杂度
【算法】
【例题】
- Fast Queries(LightOJ-1188)(普通莫队模版题):点击这里
- Little Elephant and Array(CF-220B)(普通莫队+卡常数):点击这里
- Powerful array(CF-86D)(普通莫队+卡常数):点击这里
- Sona(NBUT-1457)(普通莫队+离散化): 点击这里
- 小Z的袜子(BZOJ-2038)(普通莫队+公式推导):点击这里
- XOR and Favorite Number(CF-617E)(普通莫队+异或前缀和):点击这里
- 数颜色(洛谷-P1903)(带修莫队):点击这里
- Machine Learning(CF-940F)(带修莫队+离散化):点击这里
- Game(HDU-6610)(异或性质+带修莫队):点击这里