为什么不能这么做,以前都是这么实现的,今天刷到板子写不出来?
#include<iostream>
#include<algorithm>
#define endl '\n'
#define lowbit(x) x & -x
using namespace std;
const int N = 2050;
int n, m;
struct BIT {
int tr[N][N];
inline void add(int x, int y, int v) {
int i = x, j = y;
while (i <= n) {
j = y;
while (j <= m) {
tr[i][j] += v;
j += lowbit(j);
}
i += lowbit(i);
}
}
inline int query(int x, int y) {
int res = 0;
int i = x, j = y;
while (i) {
j = y;
while (j) {
res += tr[i][j];
j -= lowbit(j);
}
i -= lowbit(i);
}
return res;
}
inline void add(int x1, int y1, int x2, int y2, int v) {
add(x2, y2, v);
add(x2, y1 - 1, -v);
add(x1 - 1, y2, -v);
add(x1 - 1, y1 - 1, v);
}
inline int query(int x1, int y1, int x2, int y2) {
int res = 0;
res = query(x2, y2) + query(x1 - 1, y1 - 1) - query(x2, y1 - 1) - query(x1 - 1, y2);
return res;
}
} T;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
char opt;
int x1, y1, x2, y2, v;
cin >> opt >> n >> m;
n++, m++;
while (cin >> opt >> x1 >> y1 >> x2 >> y2) {
x1++, y1++, x2++, y2++;
if (opt == 'L') {
cin >> v;
T.add(x1, y1, x2, y2, v);
} else {
cout << T.query(x1, y1, x2, y2) << endl;
}
}
return 0;
}