#jag2018summerday2i. [jag2018summer_day2_i]ADD DIV MAX RESTORE

[jag2018summer_day2_i]ADD DIV MAX RESTORE

问题陈述

给定一个整数序列 a0,a1,...,aN1a_0, a_1, ..., a_{N-1}

你需要执行 QQ 个查询,每个查询可以是以下之一:

  • ADD QUERY(t=0 l r x):对于每个介于 llrr 之间(包括)的 ii,将 aia_i 替换为 ai+xa_i + x
  • DIV QUERY(t=1 l r x):对于每个介于 llrr 之间(包括)的 ii,将 aia_i 替换为 rmfloor(ai/x){\\rm floor}(a_i / x),其中 rmfloor(y){\\rm floor}(y) 是不大于 yy 的最大整数。
  • MAX QUERY(t=2 l r x=0):打印 rmmax(al,al+1,...,ar){\\rm max}(a_l, a_{l+1}, ..., a_r)
  • RESTORE QUERY(t=3 l r x=0):对于每个介于 llrr 之间(包括)的 ii,将 aia_i 设置为初始值,即输入中给出的值。

约束条件

  • 所有输入值都是整数。
  • 1leqN,Qleq200,0001 \\leq N, Q \\leq 200,000
  • 0leqaileq1080 \\leq a_i \\leq 10^8
  • ti=0,1,2,3t_i = 0, 1, 2, 3
  • 0leqlileqrileqN10 \\leq l_i \\leq r_i \\leq N-1
  • 1leqxileq10001 \\leq x_i \\leq 1000(当 tineq2,3t_i \\neq 2, 3

输入

输入以以下格式从标准输入给出:

NN QQ a0a_0 a1a_1 ... aN1a_{N-1} t1t_1 l1l_1 r1r_1 x1x_1 t2t_2 l2l_2 r2r_2 x2x_2tQt_Q lQl_Q rQr_Q xQx_Q

输出

对于每个 MAX QUERY,打印 rmmax(al,al+1,...,ar){\\rm max}(a_l, a_{l+1}, ..., a_r),每行一个。


示例输入 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

示例输出 1

5
12
3
2
3
2
  • rmmax(1,2,3,4,5)=5{\\rm max}(1, 2, 3, 4, 5) = 5
  • 1,2,3,4,511,12,3,4,51, 2, 3, 4, 5 → 11, 12, 3, 4, 5
  • rmmax(11,12,3,4,5)=12{\\rm max}(11, 12, 3, 4, 5) = 12
  • rmmax(3)=3{\\rm max}(3) = 3
  • 11,12,3,4,52,3,3,4,511, 12, 3, 4, 5 → 2, 3, 3, 4, 5
  • rmmax(2)=2{\\rm max}(2) = 2
  • rmmax(3)=3{\\rm max}(3) = 3
  • 数组恢复为 1,2,3,4,51, 2, 3, 4, 5
  • rmmax(1,2)=2{\\rm max}(1, 2) = 2

示例输入 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

示例输出 2

1
1
1

示例输入 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

示例输出 3

3
28
13
36
28
47