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]发生变化的时候进行修改。
用树状数组维护答案序列