求问
查看原帖
求问
1529697
Xian__0609520楼主2025/8/4 16:37

为什么不能这么做,以前都是这么实现的,今天刷到板子写不出来?

#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;
}
2025/8/4 16:37
加载中...