在此只贴出模板,具体的原理参考大佬博客
树状数组详解
模板:
int n;
int a[N],bit[N]; //对应原数组和树状数组
int lowbit(int x){
return x&(-x);
}
void updata(int i,int k){ //在i位置加上k
while(i <= n){
bit[i] += k;
i += lowbit(i);
}
}
int getsum(int i){ //求A[1 - i]的和
int res = 0;
while(i > 0){
res += bit[i];
i -= lowbit(i);
}
return res;
}
void sub(int i,int k) //在i的位置上减k
{
while(i<=n)
{
bit[i]-=k;
i+=lowbit(i);
}
}
Comments NOTHING