题目描述
2se 给了你一道有趣的数据结构题——
维护两个序列 {an},{bm}(m→+∞),支持以下操作 q 次:
格式 |
描述 |
add i v |
bi←v |
update l r v |
ai←ai+v (l≤i≤r) |
inq i |
在 {an} 末尾插入 bi(保证 bi=−1),然后 bi←−1 |
mninq |
令 bi 为 {bn} 中的最小非负值(保证存在且唯一),在 {an} 末尾插入 bi,然后 bi←−1 |
mxinq |
令 bi 为 {bn} 中的最大值(保证存在且唯一),在 {an} 末尾插入 bi,然后 bi←−1 |
ask l r |
输出 al+al+1+…+ar 的值 |
其中 {an} 的初值给定,bi 初始时均为 −1。
输入格式
第一行两个正整数 n,q。
第二行 n 个正整数 a1∼an。
下面 q 行,每行一个操作。
输出格式
对每个 ask
操作输出答案。
样例
1 16
5000
ask 1 1
add 2 400
add 4 300
add 6 200
add 8 100
inq 2
ask 1 2
mninq
ask 1 3
mxinq
ask 1 4
update 2 3 10000
ask 1 4
ask 2 4
ask 3 4
ask 4 4
5000
5400
5500
5800
25800
20800
10400
300
数据范围
- 1≤n≤2×105。
- 1≤q≤2×105。
- 1≤ai≤108。
- 1≤l≤r≤n+q。
- 1≤i≤2×105。
- 1≤v≤108。
- 保证同一个 bi 只会被赋给非负值最多一次。
- r 不超过当前 a 数组的长度。