bzoj2989: 数列(二进制分组+主席树)

传送门
二进制分组入门题。
主席树写错调题 2 h + 2h+ 2h+体验极差。
题意简述:给一堆点,支持加入一个点,询问有多少个点跟 ( x , y ) (x,y) (x,y)曼哈顿距离不超过 k k k


思路:题目要求的是对于一个斜着的正方形的查询。
我们考虑转切比雪夫距离转成正常的正方形。
然后就变成了一个动态的二维数点问题。
这个时候已经可以上 c d q cdq cdq分治+扫描线或者树套树切题啦。
然而还有一种叫做二进制分组的方法可以支持强制在线的操作。
我们考虑将修改分组,例如对于前 19 = 16 + 2 + 1 19=16+2+1 19=16+2+1个修改操作可以把它拆成第 1 1 1 ~ 16 16 16个修改操作,第 17 17 17~ 18 18 18个修改操作,第 19 19 19个修改操作这三组,每个组分别维护自己的答案,询问就从各个组分别询问之后把答案累加起来。
然后如果现在又来了第 20 20 20个操作,就需要把最后两个合并成一组,变成 20 = 16 + 2 + 2 20=16+2+2 20=16+2+2,接着发现最后两个组都是 2 2 2,又需要把最后两个合并成一组,变成 20 = 16 + 4 20=16+4 20=16+4
即我们模拟二进制数的进位来对修改操作进行组与组之间的合并
可以发现这样的时间复杂度是 O ( n l o g n 2 ) O(nlog_n^2) O

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值