无删除莫队与二次离线莫队

130 篇文章 1 订阅
86 篇文章 0 订阅

大佬博客
无删除莫队:
没打过但是可以拿来凑数。
不就是用可回退化(你一定需要看一看[十二省联考2019]希望)的莫队来。。。。
skip。

二次离线莫队:
一开始看是ynoi的题以为没有啥可拓展性。
然后看了上面那位大佬的博客才发现这个方法大有可为。

莫队实际上是把 O ( m ) O(m) O(m)个询问拆分成 O ( n m ) O(n\sqrt m) O(nm )个询问的离线算法。
那么每个(标准的)莫队可以分成3个部分:

1.移动一步后根据自己维护的数据结构等计算增加的答案。 O ( n m ) O(n\sqrt m) O(nm )次,单次查询 O ( a ) O(a) O(a)
2.移动一步后维护自己的数据结构。 O ( n m ) O(n\sqrt m) O(nm )次,单次维护 O ( b ) O(b) O(b)
3.移动到目标区间后利用自己的数据结构计算答案。 O ( m ) O(m) O(m)次,单次询问 O ( c ) O(c) O(c)

我们可以发现3的 O ( m ) O(m) O(m)次数特征进行优化,用一些插入复杂度低使得询问复杂度高的数据结构如值域分块。当然这不是我们需要的东西。

如果(正如此题),我们把增加的答案分为两个前缀对新增的点x的贡献的答案之差。
那么我们只需要算前缀的贡献。
那么我们只需要知道前缀的数据结构是什么样子。
即1~n一路插入过来。复杂度 O ( n b ) O(nb) O(nb)
在插到每一个前缀时,对于莫队中会需要用到这个前缀给他贡献的每个点x,求贡献。 O ( n a n ) O(na\sqrt n) O(nan )
那么复杂度就是 O ( n b + n a n + n n + m c ) O(nb + na\sqrt n + n\sqrt n + mc) O(nb+nan +nn +mc)
然后平衡一下选择一个 a a a小使得 b b b大的数据结构比如说数组即可得到一个优秀的复杂度。
前提是可以把贡献拆分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值