AcWing 798. 差分矩阵--C++
原题链接
简单
作者:
码
,
2020-05-17 11:38:25
,
所有人可见
,
阅读 1199
#include<iostream>
using namespace std;
const int N=1010;
int a[N][N],b[N][N];//a[N][N]为原序列 b[N][N]为a[N][N]的差分
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];
//假设一开始b[i][j]为空的
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
b[i][j]+=a[i][j];
b[i+1][j]-=a[i][j];
b[i][j+1]-=a[i][j];
b[i+1][j+1]+=a[i][j];
}
//对差分序列进行处理
while(q--)
{
int x1,y1,x2,y2,c;
cin>>x1>>y1>>x2>>y2>>c;
b[x1][y1]+=c;
b[x2+1][y1]-=c;
b[x1][y2+1]-=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];
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}