一维:
int n;
int a[1005],c[1005]; //对应原数组和树状数组
int lowbit(int x){
return x&(-x);
}
void updata(int i,int k){ //在i位置加上k
while(i <= n){
c[i] += k;
i += lowbit(i);`在这里插入代码片`
}
}
int getsum(int i){ //求A[1 - i]的和
int res = 0;
while(i > 0){
res += c[i];
i -= lowbit(i);
}
return res;
}
二维
int lowbit(int x)
{
return x&-x;
}
void add(int x,int y,int v)
{
while(x<=n)
{
int ty=y;
while(ty<=n)
tree[x][ty]+=v,ty+=lowbit(ty);
x+=lowbit(x);
}
}
int ask(int x,int y)
{
int res=0;
while(x)
{
int ty=y;
while(ty)
res+=tree[x][ty],ty-=lowbit(ty);
x-=lowbit(x);
}
return res;
}