1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int t[MAXn + 10][MAXn + 10];
inline int lowbit(int x) {
return x & (-x);
}
inline void Add(int x, int y, int k, int topx, int topy) {
for (int i = x; i <= topx; i += lowbit(i)) {
for (int j = y; j <= topy; j += lowbit(j)) {
t[i][j] += k;
}
}
}
inline int Sum(int x, int y) {
int ans = 0;
for (int i = x; i; i -= lowbit(i)) {
for (int j = y; j; j -= lowbit(j)) {
ans += t[i][j];
}
}
return ans;
}
inline int Sec(int x1, int y1, int x2, int y2) {
return Sum(x2, y2) - Sum(x1 - 1, y2) - Sum(x2, y1 - 1) + Sum(x1 - 1, y1 - 1);
}