莫队_Part two

带修莫队

原来莫队还能带修 \(qwq\)

算法简介

普通莫队是不支持修改的……

但是根据 \(DP\) 的思想,我们可以再给莫队加上一个时间维,表示在这次查询之前有多少次的修改。

如果普通莫队每个询问是这样写的 \([l, r]\),那带修莫队就这样 \([l, r, time]\)

带修莫队也是可以 \(O(1)\) 转移到其他区间的状态上的,每次操作除了在端点上进行修改,还要对时间进行修改和比较。

带修莫队的排序方式变为块长为 \(n^{\frac{2}{3}}\),分成了 \(n^{\frac{1}{3}}\) 块,排序时第一关键字为左端点所在块,第二关键字为右端点所在块,第三关键字是时间。

时间复杂度证明:

  • 若左右端点所在块不变,时间会单调右移,复杂度 \(O(n)\)
  • 若左右端点所在块改变,时间维一次最多移动 \(n\) 个格子,复杂度 \(O(n)\)
  • 左端点所在块一共有 \(n^{\frac{1}{3}}\) 种,右端点也有 \(n^{\frac{1}{3}}\) 种,一共有 \(n^{\frac{1}{3}} \times n^{\frac{1}{3}} = n^{\frac{2}{3}}\) 种,每种乘上移动的复杂度 \(O(n)\),总复杂度为 \(O( n^{\frac{5}{3}} )\)
posted @ 2022-08-05 10:06  zcxxxxx  阅读(22)  评论(0编辑  收藏  举报