分治 —— 莫队算法

【概述】

莫队算法(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)(异或性质+带修莫队)点击这里
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值