Migrated from Lutece 2149 线段树教做人
All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.
Description
这是一道实打实的硬核数据结构,就不BB了,看要求,懂题意。
给一个长度为n的数组a和一个长度为n−1的数组b,你需要完成以下两种操作。
1.将a[i]增大到a[i]+x.如果a[i+1]<a[i]+b[i],那么a[i+1]=a[i]+b[i],然后如果a[i+2]<a[i+1]+b[i+1],那么a[i+2]=a[i+1]+b[i+1]。a[i+3],a[i+4]....a[n]以此推类。
2.询问a数组中区间[l,r]的区间和。
我们保证一开始a[i]+b[i]≤a[i+1]。
第一行一个n,表示a数组的长度。
第二行n个数分别为a1,a2,a3...an,表示a数组的元素大小。
第三行n−1个数分别为b1,b2,b3...,表示b数组的元素大小。
第四行一个q,表示操作数量。
接下来q行:
1.格式为1 p x表示将a[i]增大x.
2.格式为2 l r表示询问a数组[l,r]的区间和。
Output
对于每个2操作,输出区间和。
Samples
3
1 2 3
1 -1
5
2 2 3
1 1 2
2 1 2
1 3 1
2 2 3
5
7
8
Constraints
2≤n≤1e5
−1e9≤ai≤1e9
−1e6≤bi≤1e6
1≤q≤1e5
对于第一类操作:1≤p≤n,0≤x≤1e6
对于第二类操作:1≤l≤r≤n
Resources
2019 UESTC ACM Training for Data Structures