Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:3 s 空间限制:256 MB

#4504. 线段树经典题

Statistics

题目描述

这是一道线段树经典题。

你需要写一个数据结构(线段树)维护长度为 $ n ​$ 的三个序列 $ A,B,C ​$,下标为 $ 1\sim n ​$,支持:

  • 对于 $ i\in[l,r] $,令 $ A_i\leftarrow\min (A_i,x) $ 。

  • 对于 $ i\in [l,r] $,令 $ A_i\leftarrow A_i+x $。
  • 求 $ \sum_{i=l}^r A_i ​$。
  • 求 $ \sum_{i=l}^r B_i $。
  • 求 $ \max_{i=l}^r C_i $。

每次修改操作后(前两种操作),令 $ B_i\leftarrow B_i+A_i,C_i\leftarrow\max(C_i,A_i) ​$。

初始给定 $ A_i $,同时初始 $ B_i=0,C_i=A_i $。

输入格式

第一行两个正整数 $ n,Q $,分别表示序列长度和操作个数。

第二行 $ n $ 个整数表示序列 $ A_i $。

接下来 $ Q $ 行,每行第一个整数表示操作类型编号,其他数字意义同题面:

  • 若为类型 $ 1 ​$,接下来三个整数 $ l,r,x ​$。
  • 若为类型 $ 2 $,接下来三个整数 $ l,r,x $。
  • 若为类型 $ 3 ​$,接下来两个整数 $ l,r ​$。
  • 若为类型 $ 4 $,接下来两个整数 $ l,r $。
  • 若为类型 $ 5 $,接下来两个整数 $ l,r $。

输出格式

对于每个类型为 $ 3,4,5 ​$ 的操作,输出一行一个整数表示答案。

样例 1

input

10 10
-3 -1 -1 2 -2 2 5 2 3 -3
2 2 6 2
4 5 8
5 6 9
1 6 7 -4
2 3 8 6
3 4 5
5 1 3
1 5 7 -7
4 5 9
5 2 8

output

11
5
16
7
22
10

样例 2

input

10 10
3 -5 -2 -2 3 -1 -1 3 -4 -4
4 5 8
2 1 10 -5
3 1 7
1 8 9 -3
5 1 10
3 7 10
2 2 4 -4
4 1 2
5 8 8
1 2 8 1

output

0
-40
3
-27
-40
3

数据范围与提示

对于 $ 100\% $ 的数据,$ 1\leq n,Q\leq 2\times 10^5,|a_i|\leq 10^9 $,$1\leq l\leq r\leq n$,数据保证过程中所有相关数值及输出的绝对值均在 long long 范围内。

数据均为随机,但没有梯度。