莫队随感

有些内容是口胡的,比如“在线二次离线莫队”。


莫队是多指针扫描线,常用的是双指针扫描线。我们仍用扫描线的理论刻画。

移动方式

莫队的最后一个指针是单调移动的。

加权

区间莫队:点在 \(r=l\) 上。双前缀莫队:点是 \((x,0)\)\((0,y)\)。它们都满足:每个维度的每个坐标都只有 \(O(1)\) 个点,故移动的代价是 \(O(1)\) 的。

那如果点是杂乱的,即只保证点的总数,不保证一次移动只添加或删除 \(O(1)\) 个点,此时莫队的分块就不对了。

  • 一种做法是扰动,将每个维度分别离散化为排列。最后一维不用,因为它的指针单调移动。
  • 另一种做法是加权分块(我目前只会对区间莫队使用),按如下方式分块:若一个位置的点数 \(+1>B\) 则单独分为一块,否则按“位置数”\(+\)“点数”\(\leq B\) 分极长的块。“单点块”不会有块内指针移动,而“多点块”块长 \(\leq B\),则 \(l\) 指针的移动复杂度为 \(O(n+mB)\);每块 \(r\) 指针单调移动,相邻两块长度之和 \(>B\),块数为 \(O({n\over B})\),故 \(r\) 指针的移动复杂度为 \(O({n^2\over B})\),取 \(B={n\over\sqrt m}\) 即可平衡为 \(O(n\sqrt m)\)

二次离线

这里专指区间莫队。原问题不能差分,需要双指针扫;但移动指针时的贡献计算可以差分,不妨再次离线,用单指针扫描线处理。

我们的贡献形式有 \(2\) 类:

  • \([1,i]\leftrightarrow i,i\in[l,r]\) 或类似的:预处理其前缀和。
  • \([1,p]\leftrightarrow i,i\in[l,r]\):对每个 \(i\) 查询,或对 \([l,r]\) 批量处理

在线二次离线莫队:对单指针扫描线可持久化,其他同在线莫队。

2025.10.13

posted @ 2025-12-09 16:19  FirCone  阅读(4)  评论(0)    收藏  举报