2D update
void update(int x, int y, int delta) {
for (int i = x; i <= n; i += i & -i)
for (int j = y; j <= m; j += j & -j)
bit[i][j] += delta;
}Advertisement
2D prefix
long query(int x, int y) {
long sum = 0;
for (int i = x; i > 0; i -= i & -i)
for (int j = y; j > 0; j -= j & -j)
sum += bit[i][j];
return sum;
}Advertisement
Rectangle sum
sum(x1,y1,x2,y2) = query(x2,y2) - query(x1-1,y2) - query(x2,y1-1) + query(x1-1,y1-1).
Range update 2D
Extend 1D difference-array trick to 2D. Four BITs needed. Complex.