题目背景
出题人并没有能力写有趣的题面……
题目描述
对于一个长度为 n 的序列 a1,a2,a3⋯an,我们定义它的平均数 a 为:
a=n1i=1∑nai
并定义它的方差 d 为:
d=n1i=1∑n(ai−a)2
现在给定一个长度为 n 的序列 b1,b2⋯bn。你需要支持两种操作。每种操作的格式为 c x y
。
若 c=1,为修改操作,代表将 bx 赋值为 y。
若 c=2,为查询操作,代表查询 bx 到 by 的方差。
为了避免浮点数误差,请以分数取模形式输出结果(对 1000000007(109+7)取模)。
输入格式
第一行两个整数 n,m,代表序列 b 的长度为 n,有 m 个操作。
第二行 n 个整数 bi,表示序列 b 的初始值。
下面有 m 行整数,每行格式为 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 解释
四次修改后,序列 b 为:{1,2,3,4}。
区间 [1,1] 的方差为 0。
区间 [1,2] 的方差为 41 。4 的逆元为 250000002。
区间 [1,3] 的方差为 32。3 的逆元为 333333336,2×333333336modM=666666672。
数据规模与约定
- 对于 50% 的数据,n≤1000,m≤1000。
- 对于 100% 的数据,1≤n,m≤1×105,1≤bi≤1×109,1≤x≤n。对于操作 1,1≤y≤1×109。对于操作2,x≤y≤n。