莫队的一点点总结

普通莫队

就是暴力
几个注意的地方:
排序关键字顺序: b l o [ l ] > r blo[l]>r blo[l]>r, 即按 b l o [ l ] blo[l] blo[l]排序, b l o [ l ] blo[l] blo[l]相同按 r r r排序.
l l l r r r移动的操作要先动add, 否则会出现 c n t cnt cnt为负的情况.
如果要记录出现次数的次数( C N T CNT CNT数组), C N T CNT CNT数组尽量开大些, 有些时候会出现魔幻情况(某个 c n t cnt cnt n n n还大??).

题1:

小Z的袜子 除了算一下新来的一个的贡献. 就是莫队裸题.

题2:

CodeForces 220B Little Elephant and Array
询问区间内出现次数为数本身的数的个数
莫队做就是裸题…
一些同样很裸的题:
SPOJ DQUERY D-query
CodeForces 86D Powerful array
LightOJ 1188 Fast Queries

题3:

Frequent values
题意就是给出一个数组(非降序), 每次询问 l l l r r r之间的众数的出现次数.
这个题其实是RMQ或者线段树的入门题, 但是在这里我们发现可以用记录次数的次数( C N T CNT CNT)的莫队做. O ( n ∗ n ) O(n*\sqrt n ) O(nn )竟然跑的飞快…并且也没有用到非降序的性质…

题…:

良心峰巨在线出题(询问 l l l r r r内和为 0 0 0的最长区间长度)
CF 617E XOR and Favorite Number(询问 l l l r r r内异或和为 k k k的区间个数)

带修莫队

对于每个询问带上时间戳, 每个修改都是一个时间, 对于每个询问不光要移动 l l l r r r, 还要有toBefore和toFuture的操作.
注意带修莫队的右端点与左端点相同, 按照在哪一块中排序, 而不是按照值排序.

题1:

数颜色
询问 l l l r r r之间有多少个不同的数, 不时修改某个位置的数.
离线所有询问和修改, 询问保存 l l l, r r r, t i m e time time(位于第几个修改后), 修改保存改之前是什么, 改之后是什么(因为不只有toFuture, 还有toPast). 修改不动, 询问排序.

题2:

UVA 12345 Dynamic len(set(a[L:R]))
每次询问L到R区间中不同数的个数, 存在单点修改.
带修莫队裸题, 只是题意比较坑, 数组下标从0开始, 区间是左闭右开.

题3:

CodeForces 940F Machine Learning
对于每次询问, 将每个数出现次数加入一个集合, 输出第一个不在集合中的正整数.
这个题一开始困扰了我很久, 怎么都觉得这个题直接套莫队是 n 2 n n^2\sqrt{n} n2n 的复杂度. 毕竟如果维护区间中"每个出现次数的次数"(CNT), 检查答案还是要从1开始枚举…

最后hdg告诉我其实CNT最大也只有几百(因为是次数的次数, 最坏情况下, a出现1次, b出现2次, c出现3次…n总共1e5, 设CNT数组最大到x, 即1+2+3+…+x=1e5, 解得x不超过447), 直接去暴力扫就好了…复杂度 O ( 447 ∗ n n ) O(447*n\sqrt{n}) O(447nn )

(然后果断T了…0w0
…CF数据真的强, 不然我不会知道原来我一直在写假的带修莫队…)
重点:
在对询问排序时, 带修莫队与普通莫队不同, 注意带修莫队的右端点与左端点相同, 按照在哪一块中排序, 而不是按照值排序.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值