二维树状数组
lowbit函数
int lowbit(int x) {
return x & (-x);
}
修改以及建树的函数
void add(int x,int y,int k) {
for (int i = x; i <= n; i += lowbit(i)) {
for (int j = y; j <= m; j += lowbit(j)) {
tr[i][j] += k;
}
}
}
一点要注意建树的数据范围,根据题目的要求来确定建树的范围。
查询函数
int query(int x,int y) {
int res = 0;
for (int i = x; i; i -= lowbit(i)) {
for (int j = y; j; j -= lowbit(j)) {
res += tr[i][j];
}
}
return res;
}
int query(int x1,int y1,int x2,int y2){
return query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)+query(x1-1,y1-1);
}