I - ADD DIV MAX RESTORE Editorial /

Time Limit: 3 sec / Memory Limit: 1024 MB

Score : 100 points

Problem Statement

You are given an integer sequence a_0, a_1, ..., a_{N-1}.

You have to perform Q queries, each query is one of the following:

  • ADD QUERY(t=0 l r x) : for each i between l and r, inclusive, replace a_i with a_i + x.
  • DIV QUERY(t=1 l r x) : for each i between l and r, inclusive, replace a_i with {\rm floor}(a_i / x), where {\rm floor}(y) is the biggest integer that is not greater than y.
  • MAX QUERY(t=2 l r x=0) : print {\rm max}(a_l, a_{l+1}, ..., a_r).
  • RESTORE QUERY(t=3 l r x=0) : for each i between l and r, inclusive, set a_i to the initial value of a_i, that is, the value given in the input.

Constraints

  • All input values are integers.
  • 1 \leq N, Q \leq 200,000
  • 0 \leq a_i \leq 10^8
  • t_i = 0, 1, 2, 3
  • 0 \leq l_i \leq r_i \leq N-1
  • 1 \leq x_i \leq 1000(when t_i \neq 2, 3)

Input

Input is given from Standard Input in the following format:

N Q
a_0 a_1 ... a_{N-1}
t_1 l_1 r_1 x_1
t_2 l_2 r_2 x_2
:
t_Q l_Q r_Q x_Q

Output

For each MAX QUERY, print {\rm max}(a_l, a_{l+1}, ..., a_r), one per line.


Sample Input 1

5 9
1 2 3 4 5
2 0 4 0
0 0 1 10
2 0 4 0
2 2 2 0
1 0 1 4
2 0 0 0
2 1 1 0
3 0 4 0
2 0 1 0

Sample Output 1

5
12
3
2
3
2
  • {\rm max}(1, 2, 3, 4, 5) = 5
  • 1, 2, 3, 4, 5 → 11, 12, 3, 4, 5
  • {\rm max}(11, 12, 3, 4, 5) = 12
  • {\rm max}(3) = 3
  • 11, 12, 3, 4, 5 → 2, 3, 3, 4, 5
  • {\rm max}(2) = 2
  • {\rm max}(3) = 3
  • The array is restored to 1, 2, 3, 4, 5
  • {\rm max}(1, 2) = 2

Sample Input 2

4 7
0 1 0 1
2 0 3 0
0 0 3 1
1 0 3 2
2 0 3 0
0 0 3 1
1 0 3 2
2 0 3 0

Sample Output 2

1
1
1

Sample Input 3

10 23
13 1 22 8 28 18 23 9 22 27
1 3 4 5
1 8 8 8
0 3 9 5
0 2 6 3
3 0 4 0
1 1 3 7
2 2 2 0
2 3 5 0
0 1 4 2
3 0 9 0
2 0 1 0
0 3 9 8
2 1 9 0
0 8 9 5
1 5 7 7
0 3 5 7
0 7 9 7
3 3 6 0
2 1 6 0
0 1 1 7
1 4 8 10
2 0 9 0
1 5 6 1

Sample Output 3

3
28
13
36
28
47