#include <cstdio> #include <algorithm> using namespace std; /*代码来自大佬。*/ const int kMax = 1000 + 10; int n; int num[kMax][kMax]; inline int lowbit(int x) { return x & -x; } int getsum(int x, int y) { if(!x || !y) return 0; int res = 0; for(int i = x;i;i -= lowbit(i)) { for(int j = y;j;j -= lowbit(j)) { res += num[i][j]; } } return res; } void add(int x, int y, int val) { for(int i = x;i <= n;i += lowbit(i)) { for(int j = y;j <= n;j += lowbit(j)) { num[i][j] += val; } } } int main() { int q, x1, y1, x2, y2, val; char op; scanf("%d%d", &n, &q); while(q --) { scanf("\n%c%d%d", &op, &x1, &y1); if(op == 'C') { scanf("%d", &val); add(x1, y1, val); } else { scanf("%d%d", &x2, &y2); printf("%d\n", getsum(x2, y2) - getsum(x1 - 1, y2) - getsum(x2, y1 - 1) + getsum(x1 - 1, y1 - 1)); } } return 0; }
二维树状数组之模板2
猜你喜欢
转载自blog.csdn.net/weixin_39145990/article/details/80071463
今日推荐
周排行