luogu#P6242. 【模板】线段树 3(区间最值操作、区间历史最值)

【模板】线段树 3(区间最值操作、区间历史最值)

题目背景

本题是线段树维护区间最值操作与区间历史最值的模板。

题目描述

给出一个长度为 nn 的数列 AA,同时定义一个辅助数组 BBBB 开始与 AA 完全相同。接下来进行了 mm 次操作,操作有五种类型,按以下格式给出:

  • 1 l r k:对于所有的 i[l,r]i\in[l,r],将 AiA_i 加上 kkkk 可以为负数)。
  • 2 l r v:对于所有的 i[l,r]i\in[l,r],将 AiA_i 变成 min(Ai,v)\min(A_i,v)
  • 3 l r:求 i=lrAi\sum_{i=l}^{r}A_i
  • 4 l r:对于所有的 i[l,r]i\in[l,r],求 AiA_i 的最大值。
  • 5 l r:对于所有的 i[l,r]i\in[l,r],求 BiB_i 的最大值。

在每一次操作后,我们都进行一次更新,让 Bimax(Bi,Ai)B_i\gets\max(B_i,A_i)

输入格式

第一行包含两个正整数 n,mn,m,分别表示数列 AA 的长度和操作次数。

第二行包含 nn 个整数 A1,A2,,AnA_1,A_2,\cdots,A_n,表示数列 AA

接下来 mm 行,每行行首有一个整数 opop,表示操作类型;接下来两个或三个整数表示操作参数,格式见【题目描述】。

输出格式

对于 op{3,4,5}op\in\{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,51,2,3,4,5
1 3 2 5 求出 [2,5][2,5] 所有数的和 14
2 1 1 3 3 [1,3][1,3] 内所有数加 33 4,5,6,4,54,5,6,4,5
3 4 2 4 求出 [2,4][2,4] 所有数的最大值 6
4 2 3 4 1 [3,4][3,4] 所有数与 11 取最小值 4,5,1,1,54,5,1,1,5
5 5 1 5 求出 [1,5][1,5] 所有位置历史最大值的最大值 6
6 3 1 4 求出 [1,4][1,4] 所有数的和 11

数据规模与约定

  • 对于测试点 1,21,2,满足 n,m5000n,m\leq 5000
  • 对于测试点 3,43,4,满足 op{1,2,3,4}op\in\{1,2,3,4\}
  • 对于测试点 5,65,6,满足 op{1,3,4,5}op\in\{1,3,4,5\}
  • 对于全部测试数据,保证 1n,m5×1051\leq n,m\leq 5\times 10^55×108Ai5×108-5\times10^8\leq A_i\leq 5\times10^8op[1,5]op\in[1,5]1lrn1 \leq l\leq r \leq n2000k2000-2000\leq k\leq 20005×108v5×108-5\times10^8\leq v\leq 5\times10^8

提示

本题输入量较大,请使用合理高效的读入方法。