树状数组28分求助
查看原帖
树状数组28分求助
516508
windfall_waterfall楼主2022/11/27 09:49
#include<iostream>
using namespace std;
int n,f,a[2222222];
int lowbit(int x){
    return (-x)&x;
}
void add(int x,int v){
    for(int i=x ; i<=n ; i+=lowbit(i)) a[i]+=v;
}
int sum(int x){
    int ans=0;
    for(int i=x ; i>0 ; i-=lowbit(i)) ans+=a[i];
    return ans;
}
int main(){
    cin>>n>>f;
    for(int i=1 ; i<=n ; i++){
        int x;
        cin>>x;
        add(i,x);
    }
    for(int i=1 ; i<=f ; i++){
        int op,a,b,c;
        cin>>op;
        if(op==1){
            cin>>a>>b>>c;
            for(int i=a ; i<=b ; i++) add(i,c);
        }
        if(op==2){
            cin>>a;
            add(1,a);
        }
        if(op==3){
            cin>>a;
            add(1,-a);
        }
        if(op==4){
            cin>>a>>b;
            cout<<sum(b)-sum(a-1)<<endl;
        }
        if(op==5){
            cout<<sum(1)<<endl;
        }
    }
    return 0;
}

AC/WA/TLE

2022/11/27 09:49
加载中...