「BZOJ 3343」教主的魔法

2 篇文章 0 订阅
2 篇文章 0 订阅

给一个长度为 N N 的正整数序列,初始值都小于 1000
你有两种操作:
1. 使一个区间内的数都增加 W W
2. 查询一段区间内大于等于 C 的数有多少个;
执行 Q Q 此操作。
N1000000 Q3000 Q ≤ 3000 1W1000 1 ≤ W ≤ 1000 1C1,000,000,000 1 ≤ C ≤ 1 , 000 , 000 , 000

简单题,分块+二分。

先分块,假设块大小是 a a ,然后块内的计数排序,O(wna+n)

修改:整块直接打标记,不满块暴力修改,然后再排序, O(na+aloga) O ( n a + a log ⁡ a )
询问:整块直接二分查询,不满的块暴力查询, O(nalogna+a) O ( n a log ⁡ n a + a )

总复杂度就是 O(qnlogn+wn) O ( q n log ⁡ n + w n )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值