#Lutece2156. 数理统计

数理统计

Migrated from Lutece 2156 数理统计

All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.

Description

被概率论整的死去活来的forgottencsc总算开始学数理统计了。他不想做作业,所以把作业丢给了你。

你需要对一个长度为NN的数列做以下三种操作。

  1. 将下标在区间[L,R][L,R]内的数全部加上一个定值kk

  2. 将下标在区间[L,R][L,R]内的数加起来并输出。

  3. 统计下标在区间[L,R][L,R]内的数的极差(最大值与最小值的差)。

数列中的数在开始时全为0。

Input

第一行有两个数N,QN,Q,代表数列长度和操作次数

接下来的QQ行,每行最开始有一个数oo

o=1o=1,则接下来有三个数L,R,kL,R,k,代表一次操作1。

o=2o=2,则接下来有两个数L,RL,R,代表一次操作2。

o=3o=3,则接下来有两个数L,RL,R,代表一次操作3。

Output

对于每一个操作2或3,你需要输出相应的结果。

Samples

3 4
1 1 1 10
1 3 3 -10
2 1 3
3 1 3
0
20

Constraints

1N,Q1061 \leq N,Q \leq 10^6

1LRN1 \leq L \leq R \leq N

0k1060\leq |k| \leq 10^6

Note

时限有点紧,请注意常数优化。(仍然是标程的两倍以上,而且标程用的是cin/cout)

读入数据量巨大,请使用scanf/printf。

仍想使用cin/cout的选手请在程序开头加上ios::sync_with_stdio(false); cin.tie(0);

有同学反映用%I64d输出long long会导致WA,请考虑使用%lld。

Resources

2019 UESTC ACM Training for Data Structures