1个T 9个RE
查看原帖
1个T 9个RE
178519
tidongCrazy楼主2020/10/26 20:45
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define lowbit(x) (x & (-x))

const int N = 2055;

int n, m;
char data;

struct BIT {
	
	int c[N][N];
	
	inline void add(int x, int y, int k) {
		
		int ty = y;
		while(x <= n) {
			y = ty;
			while(y <= m) {
				c[x][y] += k;
				y += lowbit(y);
			} x += lowbit(x);
		}
		
	}
	
	inline int get(int x, int y) {
		
		int ty = y, res = 0;
		while(x) {
			y = ty;
			while(y) {
				res += c[x][y];
				y -= lowbit(y);
			} x -= lowbit(x);
		} return res;
		
	}
	
} tree[4];

inline void Add(int x, int y, int k) {
	
	tree[0].add(x, y, k);
	tree[1].add(x, y, k * x);
	tree[2].add(x, y, k * y);
	tree[3].add(x, y, k * x * y);
	
}

inline int Get(int x, int y) {
	
	return tree[0].get(x, y) * (x * y + x + y + 1) -
		   tree[1].get(x, y) * (y + 1) -
		   tree[2].get(x, y) * (x + 1) +
		   tree[3].get(x, y);
	
}

inline int read() {
	
	int w = 1, s = 0; char c;
	while(!isdigit(c = getchar())) if(c == '-') w = -1;
	while(isdigit(c)) s = (s << 1) + (s << 3) + (c & 15), c = getchar();
	return s * w;
	
}

inline void mian() {
	
	getchar();
	n = read(); m = read();
	while(~scanf("%c", &data)) {
		int a, b, c, d, k;
		a = read(); b = read(); c = read(); d = read();
		if(data == 'L') {
			k = read();
			Add(a, b, k); Add(a, d + 1, -k);
			Add(c + 1, d + 1, k); Add(c + 1, b, -k);
		} else printf("%d\n", Get(c, d) - Get(a - 1, d) - Get(c, b - 1) + Get(a - 1, b - 1));
	}
	
}

int main() {
	
	mian();
	
}

RTRT 蒟蒻求助

2020/10/26 20:45
加载中...