树状数组

void init(){//初始化树状数组c
    for(int i=1;i<=n;i++){
        for(int j=i-(i&-i)+1;j<=i;j++){
            c[i]+=a[j];
        }
    }
}
int query(int k){//前k项和
    int sum=0;
    while(k){
        sum+=c[k];
        k-=k&-k;
    }
    return sum;
}

void update(int k,int val){//更新树状数组c
    while(k<=n){
        c[k]+=val;
        k+=k&-k;
    }
}

你可能感兴趣的:(树状数组)