【复习笔记】莫队

【复习笔记】莫队

简介

莫队可以用来批量处理区间问题,是 一种高效的暴力

实现

将区间 \([1,n]\) 分为长度为 \(B\) 的若干块,将 左端点 排序,对于左端点在同一块内的询问,再按 右端点 排序。

复杂度证明
左端点同一个 内一次最多移动 \(B\),由于有 \(q\) 次询问,所以最多移动 \(q\) 次,时间复杂度 \(O(qB)\)
当询问的左端点跨过块的边界时,复杂度最大 \(O(2B)\),共 \(O(\frac{n}{2B})\) 次, 所以时间复杂度 \(O(n)\)
右端点,跨过每个块时最多 \(O(n)\)(按升序排序之后),共 \(n \over B\) 个块,总共 \(O(\frac{n^2}{B})\)
总时间复杂度 \(O(qB+\frac{n^2}{B})\),平衡一下 \(B\)\(\frac{n}{\sqrt q}\) 时最优。

小优化:对于询问左端点在奇数编号块内的右端点按 升序 排列,偶数块按 降序 排列(减少右端点跨块之间的移动)。

posted @ 2025-07-27 19:46  GuoSN0410  阅读(17)  评论(0)    收藏  举报