#树状数组#洛谷 5142 区间方差

洛谷5142:区间方差的树状数组解法
博客介绍了如何使用树状数组解决洛谷1471题目的区间方差问题,包括题目的要求,分析了通过维护区间和与区间平方和来高效查询的方法,并提供了相应的代码实现。

洛谷 1471 方差(此题强化版)
方差的题解


题目

满足单点修改和区间查询方差


分析

我的题解已经说的比较清楚了,只需要维护区间和以及区间平方和,由于数据比较水,所以说可以用树状数组维护,然后再用逆元求解


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
typedef long long ll;
const ll mod=1000000007;
ll n,a[100001],b[100001],m;
inline ll inv(ll x){
    if (x<2) return x;
    return (mod-mod/x)*inv(mod%x)%mod;
}
inline ll p(ll x){return x*x;}
inline ll iut(){
    rr ll ans=0; rr char c=getchar();
    while (!isdigit(c)) c=getchar();
    while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    return ans;
}
inline void add1(ll x,ll t){while (x<=n) a[x]=(a[x]+t)%mod,x+=-x&x;}
inline void add2(ll x,ll t){while (x<=n) b[x]=(b[x]+t)%mod,x+=-x&x;}
inline ll ask1(ll x){
    rr ll ans=0;
    while (x) ans=(ans+a[x])%mod,x-=-x&x;
    return ans;
}
inline ll ask2(ll x){
    rr ll ans=0;
    while (x) ans=(ans+b[x])%mod,x-=-x&x;
    return ans;	
}
inline void print(ll ans){
    if (ans>9) print(ans/10);
    putchar(ans%10+48);
}
signed main(){
    n=iut(); m=iut();
    for (rr ll i=1;i<=n;++i) a[i]=(a[i-1]+iut())%mod,b[i]=(b[i-1]+p(a[i]-a[i-1]))%mod;
    for (rr ll i=n;i>=1;--i) a[i]-=a[i-(-i&i)],b[i]-=b[i-(-i&i)];
    while (m--){
        rr ll q=iut(),l=iut(),r=iut();
        if (q==1) add1(l,r-ask1(l)+ask1(l-1)),add2(l,r*r-ask2(l)+ask2(l-1));
        else if (l==r) putchar(48),putchar(10);
        else{
            rr ll ans=((ask2(r)-ask2(l-1))*(r-l+1)%mod-p((ask1(r)-ask1(l-1))%mod))%mod;
            ans=(ans+mod)*inv(p(r-l+1)%mod)%mod;
            print(ans); putchar(10);
        }
    }
    return 0;
}
···
项目新建**.ipynb文件 ,该文件是做什么的?,独立完成一个python3程序——读取iris数据集,并进行统计分析 Ipynb文件在主体程序中的部分代码如下 import numpy as np iris_sepal_length = np.loadtxt("F:\\AI\\iris.csv", delimiter=",") #读取文件 print(&#39;花萼长度表为:&#39;,iris_sepal_length) #此行插入排序代码 #对数据进行排序 print(&#39;排序后的花萼长度表为:&#39;,iris_sepal_length) ##此行去除平均值代码 print(&#39;去重后的花萼长度表为:&#39;, #此行去除平均值代码 ) print(&#39;花萼长度表的总和为:&#39;, #此行计算数组综合代码) #计算数组总和 #计算所有元素的累计和 print(&#39;花萼长度表的累计和为:&#39;, #此行所有元素累加和) print(&#39;花萼长度表的均值为:&#39;,计算数组平均值插入代码) #计算数组均值 #计算数组标准差 print(&#39;花萼长度表的标准差为:&#39;,#插入计算数组标准差) print(&#39;花萼长度表的方差为:&#39;, #插入计算数组方差) #计算数组方差 print(&#39;花萼长度表的最小值为:&#39;#插入计算数组最小值) #计算最小值 print(&#39;花萼长度表的最大值为:&#39;, #插入计算数组最大值) #计算最大值 运行和调试(请您说清楚你做的项目的思路,画出流程图或框架图,以及主要关键语句的解释和调用的参数说明。 3、实验总结: 主要的总结(主观题)请发表自己的看法: 总结下实验过程中遇到的困难和解决思路。
03-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值