不会的可以看这篇文章:https://blog.csdn.net/qq_41837216/article/details/85041511
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1024+10;
int a[maxn][maxn],c[maxn][maxn];
int n;
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int y,int v) //修改
{
for(int i=x;i<=n;i += lowbit(i))
for(int j=y;j<=n;j += lowbit(j))
c[i][j] += v;
}
int sum(int x,int y) //求和
{
int ans=0;
for(int i=x;i>0;i -= lowbit(i))
for(int j=y;j>0;j -= lowbit(j))
ans+=c[i][j];
return ans;
}
int ask(int x1,int y1,int x2,int y2) //求子矩阵和
{
return sum(x2,y2)+sum(x1-1,y1-1)-sum(x1-1,y2)-sum(x2,y1-1);
}
int main()
{
int p,x,x1,y1,y,v;
scanf("%d%d",&p,&n);
while(~scanf("%d",&p))
{
if(p==1)
{
scanf("%d%d%d",&x,&y,&v);
add(x+1,y+1,v);
}
else if(p==2)
{
scanf("%d%d%d%d",&x,&y,&x1,&y1);
printf("%d\n",ask(x+1,y+1,x1+1,y1+1));
}
else if(p==3)
break;
}
return 0;
}