很多人以前写树状数组可能会这样写:
void update(int x,int k){
for(;x<=n;x+=lowbit(x)) t[x]+=k;
}
当然,这并没问题。
发现这是二维,于是乎就非常熟练地敲下了以下的的代码:
void update(int c,int x,int y,int k){
for(;x<=n;x+=lowbit(x))
for(;y<=n;y+=lowbit(y))
t[c][x][y]+=k;
}
这样,你的 y 就再也回不去初始的时候了。请改成:
void update(int c,int x,int y,int k){
for(int i=x;i<=n;i+=lowbit(i))
for(int j=y;j<=m;j+=lowbit(j))
t[c][i][j]+=k;
}