二维差分模板
牛客测试链接:https://www.nowcoder.com/practice/50e1a93989df42efb0b1dec386fb4ccc
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
int n,m,q;
ll b[N][N];
ll diff[N][N];
void add(int x1,int y1,int x2,int y2,int k)
{
diff[x1][y1]+=k;
diff[x2+1][y1]-=k;
diff[x2+1][y2+1]+=k;
diff[x1][y2+1]-=k;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cin>>b[i][j];
}
while(q--)
{
int x1,y1,x2,y2,k;
cin>>x1>>y1>>x2>>y2>>k;
add(x1,y1,x2,y2,k);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
diff[i][j]+=diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<b[i][j]+diff[i][j]<<' ';
}
cout<<endl;
}
return 0;
}
洛谷测试链接:https://www.luogu.com.cn/problem/P3397
#include <bits/stdc++.h>
using namespace std;
const int N=1e3+10;
typedef long long ll;
int n,m;
int b[N][N];
int diff[N][N];
void add(int x1,int y1,int x2,int y2)
{
diff[x1][y1]++;
diff[x2+1][y1]--;
diff[x2+1][y2+1]++;
diff[x1][y2+1]--;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
while(m--)
{
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
add(x1,y1,x2,y2);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
diff[i][j]+=diff[i-1][j]+diff[i][j-1]-diff[i-1][j-1];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<diff[i][j]<<' ';
}
cout<<endl;
}
return 0;
}

浙公网安备 33010602011771号