分治 —— 莫队算法

【概述】

莫队算法(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)(异或性质+带修莫队):点击这里

你可能感兴趣的:(#,分治——莫队算法,——分治——)