差分矩阵

S[i, j] = 第i行j列格子左上部分所有元素的和
以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:
S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1];

#include<iostream>
using namespace std;
int a[1010][1010];
int b[1010][1010];
int main()
{
	int n,m,q;
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	cin>>a[i][j];
	for(int i=0;i<q;i++)
	{
		int x1,y1,x2,y2,c;
		cin>>x1>>y1>>x2>>y2>>c;
		b[x1][y1]+=c;
		b[x1][y2+1]-=c;
		b[x2+1][y1]-=c;
		b[x2+1][y2+1]+=c;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
	{
		b[i][j]+=b[i][j-1]+b[i-1][j]-b[i-1][j-1];
		a[i][j]+=b[i][j];
		cout<<a[i][j]<<' ';
	}
	cout<<endl;
	}
	return 0;
}