树状数组区间更新

来源:互联网 发布:腾讯旗下子公司 知乎 编辑:程序博客网 时间:2024/06/05 19:30
#include<stdio.h>#include<iostream>#include<string.h>#define maxn 101000#define mem(a,b) memset(a,b,sizeof(a))#define lowbit(x) x&(-x)#define sf scanf#define pf printfusing namespace std;int n,q,num;int c[maxn];void update(int i,int x){    for(;i<=n;i+=lowbit(i)) c[i]+=x;}int sum(int a){    int s=0;    for(int i=a;i>0;i-=lowbit(i)) s+=c[i];    return s;}int main(){    freopen("a.txt","r",stdin);    sf("%d",&n);    for(int i=1;i<=n;i++){        int x;        scanf("%d",&x);        update(i,x);    }    scanf("%d",&q);    while(q--){        scanf("%d",&num);        if(num==1){            int a,b,c;            sf("%d%d%d",&a,&b,&c);            for(int i=a;i<=b;i++) update(i,c);//区间更新        }        else{            int a;            sf("%d",&a);            pf("%d\n",sum(a)-sum(a-1));        }    }    return 0;}

0 1