思路:
二维树状数组
c o d e code code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n, m;
long long c[5000][5000];
long long lowbit(long long x)
{return x & -x;}
void add(long long x, long long y, long long z)
{
for(long long i=x; i<=n; i+=lowbit(i))
for(long long j=y; j<=m; j+=lowbit(j))
c[i][j]+=z;
}
long long sum(long long x, long long y)
{
long long ans=0;
for(long long i=x; i; i-=lowbit(i))
for(long long j=y; j; j-=lowbit(j))
ans+=c[i][j];
return ans;
}
int main()
{
cin>>n>>m;
long long z;
while(scanf("%lld", &z)!=EOF)
{
long long x, y, x1, y1, k;
if(z==1)
{
scanf("%lld%lld%lld", &x, &y, &k);
add(x, y, k);
}
else
{
scanf("%lld%lld%lld%lld", &x, &y, &x1, &y1);
printf("%lld\n", sum(x1, y1)-sum(x1, y-1)-sum(x-1, y1)+sum(x-1, y-1));
}
}
return 0;
}