Description
有一排 n 坑位。这些坑位都可以种树。
有时候,小 ω 会在一个区间释放一个魔法,使得这个区间的树高度增加 k (高度为 0 的也会生长)。
有时候,小 ω 会询问一个区间的树的高度之和。
有时候,会产生一场大火,每次操作之后,火都会蔓延到左右两个格子,火经过的格子,树的高度都会变成 0。
有时候,小 ω 会把一个区间的火给浇灭。
具体的来说,每次小 ω 会释放一个魔法/进行一个询问/放一把火/浇灭一个区间的火。然后,每个火会燃烧到左边,右边,和自己原来的位置。
如果一个位置有多个火,和一个效果相同,然后所有有火的位置的树高度都变为了 0,即使施加了法术,这个位置的树高度依然为 0。
小 ω 发现他借来的 Debian 机坏了,只能来求助于你。
第一行俩正整数 n,q。
下面一行 n 个整数表示初始状态下每个位置的树的高度。
下面 q 行,每行第一个正整数 opi。
若 opi=1 ,那么下面紧跟仨正整数 li,ri,ki,表示对区间 [li,ri] 释放了一次魔法,让树的高度增加了 ki。
若 opi=2 ,那么下面紧跟俩正整数 li,ri,表示进行了一次询问。
若 opi=3,那么下面紧跟一个正整数 posi,表示 posi 发生了一场大火。
若 opi=4,那么下面紧跟俩正整数 li,ri,表示浇灭了 li 到 ri 的大火。
Output
若干行每行一个整数,表示每个询问的答案。
Samples
Limitation
对于所有的数据,1≤li≤ri≤n≤105,1≤q≤5×105,1≤ai,ki≤105。
子任务 |
分值 |
n |
q |
特殊性质 |
依赖的子任务 |
1 |
19 |
n≤1000 |
q≤1000 |
无 |
无 |
2 |
26 |
n≤100000 |
q≤100000 |
保证数据随机 |
3 |
8 |
opi=4 |
4 |
17 |
n≤50000 |
q≤50000 |
无 |
1 |
5 |
30 |
n≤100000 |
q≤500000 |
1,2,3,4 |
友情提醒:请相信自己算法的常数。