#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
typedef long long ll;
const ll inf = 0x3f3f3f3f;
const ll N = 1333;
int n;
struct BIT {
ll d[N][N];
inline ll lowbit(ll x) {return -x&x;}
void add (int x, int y, ll k) {
for (int i = x; i <= n; i += lowbit(i)) {
for (int j = y; j <= n; j += lowbit(j)) {
d[i][j] +=k;
}
}
}
ll ask(int x, int y) {
ll ret = 0;
for (int I = x; I >0; I -= lowbit(I)) {
for (int J = y; J > 0; J -= lowbit(J)) {
ret += d[I][J];
}
}
return ret;
}
}T;
signed main() {
scanf("%d%d", &n, &n);
n++;
int op;
while (~scanf("%d", &op)) {
if (op == 3)break;
else if (op == 2) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x1 ++,y1++,x2++,y2++;
printf("%lld\n", T.ask(x2, y2) - T.ask(x1-1, y2) - T.ask(x2, y1-1) + T.ask(x1-1, y1-1));
}
else if (op == 1) {
int x, y, k;
scanf("%d%d%d", &x, &y, &k);
x++,y++;
T.add(x, y, k);
// cout << T.ask(x, y) << endl;
}
}
}
原文:https://www.cnblogs.com/Xiao-yan/p/14693422.html