【洛谷live】【线段树】【树状数组】【方差公式】【逆元】区间方差 题解

这道题目要求在长度为n的序列上进行修改和查询操作,查询操作需要返回区间方差。由于方差涉及平均数的计算,直接使用线段树或树状数组无法解决。通过推导方差公式,可以将其转化为维护区间和与区间平方和的问题,再利用逆元处理分数取模。代码实现中使用线段树或树状数组来更新和查询这些信息。
摘要由CSDN通过智能技术生成

题目描述
现在给定一个长度为n的序列。你需要支持两种操作。每种操作的格式为c x y。
若c=1,为修改操作,代表将赋值为y。
若c=2,为查询操作,代表查询到的方差。
为了避免浮点数误差,请以分数取模形式输出结果(对1000000007()取模)。如果不知道什么是分数取模,请看下文。
对于一个正整数a,如果,则称a模M为r。记为或者。
对于一个正整数a,如果存在正整数b,使得,则称b为a的逆元,记为。此题我们保证逆元一定存在。
对于一个分数,其取模表示为:。
在此题中,M=1000000007()。
输入输出格式
输入格式:
第一行两个数n,m,代表序列b的长度为n,有m个操作。
第二行n个整数,表示序列b的初始值。
下面有m行整数,每行格式为c a b,含义如上文所示。保证所有操作合法。
输出格式:
对于每个操作2,输出一行。
输入输出样例
输入样例#1:
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
输出样例#1:
0
250000002
666666672
250000003
说明
四次修改后,序列b为:1,2,3,4。
区间[1,1]的方差为0.
区间[1,2]的方差为1/4。4的逆元为250000002。
区间[1,3]的方差为2/3。3的逆元为333333336,2*333333336%M=666666672。
对于50%的数据,n≤1000,m≤1000.
对于100%的数据,n≤100000,m≤100000,1≤b_i≤1000000000,1≤x≤n。对于操作1,1≤y≤1000000000。对于操作2,x≤y≤n。
保证逆元一定存在。注意M=1000000007(10^9+7)。

这道题直接用线段树或树状数组是不行的。
但是,我居然神奇的推出了方差公式
∵平均数 a= 1nni=1ai
 方差 d= 1nni=1aia2
∴d=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值