【题解】Luogu P3368 【【模板】树状数组 2】

这道模板题,还真的是道模板题

#include<cstdio>

const int MAXN = 500000 + 6;
int N,M,a[MAXN],c[MAXN];

inline int lowbit(int x){
    return x & -x;
}

void add(int x,int y){
    for(;x <= N;x += lowbit(x)){
        c[x] += y;
    }
}

int ask(int x){
    int ans = 0;
    for(;x;x -= lowbit(x)){
        ans += c[x];
    }
    return ans;
}

void init(){
    
}

int main(){
    scanf("%d %d",&N,&M);
    
    for(int i = 1;i <= N;i++){
        scanf("%d",&a[i]);
    }
    
    for(int i = 0;i < M;i++){
        int op,x,y,k;
        scanf("%d",&op);
        if(op == 1){
            scanf("%d %d %d",&x,&y,&k);
            add(x,k);
            add(y + 1,-k);
        }else if(op == 2){
            scanf("%d",&x);
            int ans = ask(x);
            ans += a[x];
            printf("%d\n",ans);
        }
    }
    
    return 0;
}