#P1516. 线段树维护平均数与方差

线段树维护平均数与方差

线段树维护平均数与方差

题目描述

维护一个长度为nn序列aiai,支持33种操作共mm次:

  1. 给定区间[l,r][l,r] 以及 xx,给 [al...ar][a_l...a_r] 都加上xx
  2. 给定区间[l,r][l,r],求出区间 [al...ar][a_l...a_r] 的均值 a=1rl+1i=lraia= \frac{1}{r−l+1} \sum^{r}_{i=l}a_i
  3. 给定区间[l,r][l,r],求出区间 [al...ar][a_l...a_r] 的方差$D= \frac{1}{r−l+1} \sum^{r}_{i=l}(a_i - \overline{a})^{2}$

输入格式

第一行包含两个正整数 N,MN,M,分别表示数列中实数的个数和操作的个数。

第二行包含 NN 个实数,其中第 ii 个实数表示数列的第 ii 项。

接下来 MM 行,每行为一条操作,格式为以下三种之一:

操作 111 x y k ,表示将第 xx 到第 yy 项每项加上 kkkk 为一整数。
操作 222 x y ,表示求出第 xx 到第 yy 项这一子数列的平均数。
操作 333 x y ,表示求出第 xx 到第 yy 项这一子数列的方差。

数据范围:

n,m105,x109n,m≤10^5,x≤10^9, 结果对 109+710^9+7modmod

输出格式

输出包含若干行,每行为一个实数,

样例 #1

样例输入 #1

3 5
9 10 6 2 3 3
2 3 3
1 2 3
9
3 2 3
3 1 1

样例输出 #1

6
6
4
0