51nod3082 线段树进阶6

这篇博客探讨了3082题的线段树进阶解法,涉及序列a和b,其中a全为0,b为1到n的排列。文章介绍如何处理m次操作,包括区间加1和查询区间内[ai/bi]的和。通过分析全局和的上界,提出了利用树状数组和线段树维护答案,每次区间加1后找到答案变化的位置进行更新,总时间复杂度为O(n+mlog2n)。
摘要由CSDN通过智能技术生成

3082 线段树进阶6

给两个长为n的序列a和b,a是全0的序列,b是1~n的排列,支持m次操作:

1 l r:将a的 [l,r]区间内所有元素的值加1

2 l r:查询区间 [l,r]内所有[ai/bi]的和,这里方括号指向下取整

输入

第一行包含两个整数 n,m,分别表示该数列数字的个数、操作的总个数。
第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列 b 第 i 项的初始值。
接下来 m 行每行包含 3 个整数 opt l r,表示一个操作,具体含义和题面中一样。

输出

对每个第二类操作,输出一行表示答案。

数据范围

对于100%的数据,1≤n,q≤10^5, 1≤l≤r≤n

输入样例

5 12
1 5 2 4 3
1 1 4
2 1 4
1 2 5
2 2 5
1 3 5
2 1 5
1 2 4
2 1 4
1 2 5
2 2 5
1 2 2
2 1 5

输出样例

1
1
2
4
4
6

解析:

我们先假设进行了n次全局加,看看全局和的上界能到多少。

发现全局的和是 ∑(n/i)=O(nlogn),这里是一个调和级数。

由于答案不会特别大,所以我们可以考虑每次每个位置的 [ai/bi]发生变化的时候进行修改。

用树状数组维护答案序列࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值