#P5142. 区间方差

区间方差

背景

出题人并没有能力写有趣的题面……

题目描述

对于一个长度为 nn 的序列 a1,a2,a3⋯ana_1,a_2,a_3\cdots a_n,我们定义它的平均数 aa 为:

a=1n∑i=1naia=\frac{1}{n}\sum_{i=1}^{n}a_i

并定义它的方差 dd 为:

d=1n∑i=1n(ai−a)2d=\frac{1}{n}\sum_{i=1}^{n}(a_i-a)^2

现在给定一个长度为 nn 的序列 b1,b2⋯bnb_1,b_2\cdots b_n。你需要支持两种操作。每种操作的格式为 c x y。

若 c=1c=1,为修改操作,代表将 bxb_x 赋值为 yy。

若 c=2c=2,为查询操作,代表查询 bxb_x 到 byb_y 的方差。

为了避免浮点数误差,请以分数取模形式输出结果(对 10000000071000000007(109+710^9+7)取模)。

输入格式

第一行两个整数 n,mn,m,代表序列 bb 的长度为 nn,有 mm 个操作。

第二行 nn 个整数 bib_i,表示序列 bb 的初始值。

下面有 mm 行整数,每行格式为 c x y,含义如上文所示。保证所有操作合法。

输出格式

对于每个操作 2,输出一行。

4 8
0 0 0 0
1 1 1
1 2 2
1 3 3
1 4 4
2 1 1
2 1 2
2 1 3
2 1 4
0
250000002
666666672
250000003

提示

样例 1 解释

四次修改后,序列 bb 为:{1,2,3,4}\{1,2,3,4\}。

区间 [1,1][1,1] 的方差为 00。

区间 [1,2][1,2] 的方差为 14\frac{1}{4} 。44 的逆元为 250000002250000002。

区间 [1,3][1,3] 的方差为 23\frac{2}{3}。33 的逆元为 333333336333333336,2×333333336 mod M=6666666722\times333333336\bmod M=666666672。

数据规模与约定

  • 对于 50%50\% 的数据,n≤1000n\leq 1000,m≤1000m\leq 1000。
  • 对于 100%100\% 的数据,1≤n,m≤1×1051\leq n,m\leq 1\times 10^5,0≤bi≤1×1090\leq b_i\leq 1\times 10^9,1≤x≤n1\leq x\leq n。对于操作 1,0≤y≤1×1090\leq y\leq 1\times 10^9。对于操作2,x≤y≤nx\leq y\leq n。