0
点赞
收藏
分享

微信扫一扫

242. 一个简单的整数问题【树状数组 区间加 单点和】

Go_Viola 2022-03-18 阅读 42

在这里插入图片描述
用差分来实现区间加。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int tr[N],a[N],n,m;
int lowbit(int x){return x&(-x);}
void add(int u,int x)
{
    for(int i=u;i<=n;i+=lowbit(i)) tr[i]+=x;
}
int query(int u)
{
    int sum=0;
    for(int i=u;i;i-=lowbit(i)) sum+=tr[i];
    return sum;
}
int main(void)
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        add(i,a[i]);
        add(i+1,-a[i]);
    }
    while(m--)
    {
        string op; cin>>op;
        if(op=="C")
        {
            int l,r,d; cin>>l>>r>>d;
            add(l,d),add(r+1,-d);
        }else
        {
            int x; cin>>x;
            cout<<query(x)<<endl;
        }
    }
    return 0;
}
举报

相关推荐

树状数组求区间和 golang

0 条评论