树状数组

大佬的讲解
视频讲解
两者搭配食用效果更佳
树状数组就是一个树状数组的板子题

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

求最低位1代表的值是多少

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

将包含这个数的每一个值都更新

int sum(int x){
    int sum=0;
    while(x>0){
        sum+=c[x];
        x-= lowbit(x);
    }
    return sum;
}

求前缀和

int32_t main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        add(i,x);
    }
    for(int i=1;i<=m;i++){
        int p,x,k;
        cin>>p>>x>>k;
        if(p==1){
            add(x,k);
        }
        else{
            cout<<sum(k)-sum(x-1)<<endl;
        }
    }
    return 0;
}
posted @ 2023-08-08 10:44  zyzzzzlh  阅读(18)  评论(0)    收藏  举报