题目背景
本题是线段树维护区间最值操作与区间历史最值的模板。
题目描述
给出一个长度为 n 的数列 A,同时定义一个辅助数组 B,B 开始与 A 完全相同。接下来进行了 m 次操作,操作有五种类型,按以下格式给出:
1 l r k
:对于所有的 i∈[l,r],将 Ai 加上 k(k 可以为负数)。
2 l r v
:对于所有的 i∈[l,r],将 Ai 变成 min(Ai,v)。
3 l r
:求 ∑i=lrAi。
4 l r
:对于所有的 i∈[l,r],求 Ai 的最大值。
5 l r
:对于所有的 i∈[l,r],求 Bi 的最大值。
在每一次操作后,我们都进行一次更新,让 Bi←max(Bi,Ai)。
输入格式
第一行包含两个正整数 n,m,分别表示数列 A 的长度和操作次数。
第二行包含 n 个整数 A1,A2,⋯,An,表示数列 A。
接下来 m 行,每行行首有一个整数 op,表示操作类型;接下来两个或三个整数表示操作参数,格式见【题目描述】。
输出格式
对于 op∈{3,4,5} 的操作,输出一行包含一个整数,表示这个询问的答案。
5 6
1 2 3 4 5
3 2 5
1 1 3 3
4 2 4
2 3 4 1
5 1 5
3 1 4
14
6
6
11
提示
样例说明 #1
操作次数 |
输入内容 |
操作 |
数列 |
输出结果 |
0 |
|
1,2,3,4,5 |
|
1 |
3 2 5 |
求出 [2,5] 所有数的和 |
14 |
2 |
1 1 3 3 |
将 [1,3] 内所有数加 3 |
4,5,6,4,5 |
|
3 |
4 2 4 |
求出 [2,4] 所有数的最大值 |
6 |
4 |
2 3 4 1 |
将 [3,4] 所有数与 1 取最小值 |
4,5,1,1,5 |
|
5 |
5 1 5 |
求出 [1,5] 所有位置历史最大值的最大值 |
6 |
6 |
3 1 4 |
求出 [1,4] 所有数的和 |
11 |
数据规模与约定
- 对于测试点 1,2,满足 n,m≤5000;
- 对于测试点 3,4,满足 op∈{1,2,3,4};
- 对于测试点 5,6,满足 op∈{1,3,4,5};
- 对于全部测试数据,保证 1≤n,m≤5×105,−5×108≤Ai≤5×108,op∈[1,5],1≤l≤r≤n,−2000≤k≤2000,−5×108≤v≤5×108。
提示
本题输入量较大,请使用合理高效的读入方法。