加载中...
莫队算法是一种离线处理区间查询的技巧,由竞赛选手莫涛推广而得名。它把所有查询按分块排序后统一处理,靠双指针增量地维护当前区间的答案,以根号级别的均摊移动次数解决大量区间查询问题。

| 命名来源 | 选手莫涛 |
| 处理方式 | 离线 |
| 复杂度 | O((n+q)√n) |
| 核心 | 分块排序+双指针 |
| 变种 | 带修莫队、树上莫队 |
莫队算法是一类离线的区间查询处理技巧,核心思想是把所有询问重新排序,再用两个指针在序列上缓慢滑动,增量地维护当前区间对应的答案。它以竞赛选手莫涛的名字命名,在无法用数据结构直接维护的统计类查询上尤为有效。
莫队算法要求所有查询能离线获取,即预先知道全部询问。它把序列分成大小约为根号n的块,再按左端点所在块为第一关键字、右端点为第二关键字对询问排序。这样处理相邻询问时,左右指针的总移动次数被控制在根号级别的均摊范围内。
莫队算法适用于区间内不同元素个数、区间众数、区间逆序对等难以用线段树直接维护、但支持元素加入删除时增量更新的统计查询。它在算法竞赛中广泛应用,也可用于对静态数据的批量区间统计分析。
问:莫队算法必须离线吗?答:标准莫队依赖对询问排序,因此必须离线;若强制在线,则通常需要换用可持久化数据结构等其他方案。
问:分块大小如何选取?答:通常取序列长度的平方根附近,可根据询问数与序列长度的比例微调,以在左右指针移动之间取得最佳平衡。

| 命名来源 | 选手莫涛 |
| 处理方式 | 离线 |
| 复杂度 | O((n+q)√n) |
| 核心 | 分块排序+双指针 |
| 变种 | 带修莫队、树上莫队 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧