【复习笔记】莫队
【复习笔记】莫队
简介
莫队可以用来批量处理区间问题,是 一种高效的暴力。
实现
将区间 \([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}\) 时最优。
小优化:对于询问左端点在奇数编号块内的右端点按 升序 排列,偶数块按 降序 排列(减少右端点跨块之间的移动)。

浙公网安备 33010602011771号