AcWing 242. 一个简单的整数问题

给定长度为N的数列A,然后输入M行操作指令。

第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。

第二类指令形如“Q X”,表示询问数列中第x个数的值。

对于每个询问,输出一个整数表示答案。

#include<bits/stdc++.h>
#define N 1000000
using namespace std;
int a[N],b[N];
int n,m;
void add(int x,int y){for(;x<=n;x+=x&-x)a[x]+=y;}
int ask(int x)
{
    int ans=0;
    for(;x;x-=x&-x)ans+=a[x];
    return ans;
}
int main()
{
    cin>>n>>m;
    long long last = 0, now;
    for (int i=1;i<=n;i++) 
    {
        scanf("%lld",&now);
        add(i,now-last);
        last=now;
    }
    for(int i=1;i<=m;i++)
    {
        char x;
        cin>>x;
        if(x=='C'){int a,b,c;cin>>a>>b>>c;add(a,c);add(b+1,-c);}
        else{int y;cin>>y;cout<<ask(y)<<endl;}
    }
    return 0;
}

 

posted @ 2021-02-01 10:53  君与  阅读(51)  评论(0)    收藏  举报