2411 - 扶苏的问题
描述

给定一个长度为 n 的序列 a,要求支持如下三个操作:

1. 给定区间 [l, r],将区间内每个数都修改为 x

2. 给定区间 [l, r],将区间内每个数都加上 x

3. 给定区间 [l, r],求区间内的最大值。


输入

第一行是两个整数,依次表示序列的长度 n 和操作的个数 q。  

第二行有 n 个整数,第 i 个整数表示序列中的第 i 个数 a_i。  

接下来 q 行,每行表示一个操作。每行首先有一个整数 op,表示操作的类型。

- 若 op = 1,则接下来有三个整数 l, r, x,表示将区间 [l, r] 内的每个数都修改为 x

- 若 op = 2,则接下来有三个整数 l, r, x,表示将区间 [l, r] 内的每个数都加上 x

- 若 op = 3,则接下来有两个整数 l, r,表示查询区间 [l, r] 内的最大值。


输出

对于每个 op = 3 的操作,输出一行一个整数表示答案。


样例

输入

6 6
1 1 4 5 1 4
1 1 2 6
2 3 4 2
3 1 4
3 2 3
1 1 6 -1
3 1 6

输出

7
6
-1

输入

4 4
10 4 -3 -7
1 1 3 0
2 3 4 -4
1 2 4 -9
3 1 4

输出

0
提示

- 对于 40\% 的数据,n, q \leq 10^3

- 对于 90\% 的数据,n, q \leq 10^5

- 对于 100\% 的数据,1 \leq n, q \leq 10^61 \leq l, r \leq nop \in \{1, 2, 3\}|a_i|, |x| \leq 10^9


题目参数
Time Limit 2 seconds
Memory Limit 512 MB
提交次数 22
通过次数 8