差分

一维

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+5;
 4 int n,m,l,r,c;
 5 int a[N],d[N];
 6 int main()
 7 {
 8     cin>>n>>m;
 9     for(int i=0;i<n;i++) cin>>a[i];
10     for(int i=0;i<n;i++){
11         if(i==0) d[i]=a[i];
12         else d[i]=a[i]-a[i-1];
13     }
14     while(m--){
15         cin>>l>>r>>c;
16         d[l-1]+=c;
17         d[r]-=c;
18     }
19     for(int i=0;i<n;i++){
20         if(i==0) cout<<d[i]<<" ";
21         else{
22             d[i]+=d[i-1];
23             cout<<d[i]<<" ";
24         }
25     }
26     return 0;
27 }

二维

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e3+5;
 4 int a[N][N],d[N][N];
 5 int n,m,q;
 6 void deal(int x1,int y1,int x2,int y2,int c)
 7 {
 8     d[x1][y1]+=c;
 9     d[x1][y2+1]-=c;
10     d[x2+1][y1]-=c;
11     d[x2+1][y2+1]+=c;
12 }
13 int main()
14 {
15     cin>>n>>m>>q;
16     for(int i=1;i<=n;i++){
17         for(int j=1;j<=m;j++){
18             cin>>a[i][j];
19         }
20     }
21     for(int i=1;i<=n;i++){
22         for(int j=1;j<=m;j++){
23             deal(i,j,i,j,a[i][j]);
24         }
25     }
26     while(q--){
27         int x1,x2,y1,y2,c;
28         cin>>x1>>y1>>x2>>y2>>c;
29         deal(x1,y1,x2,y2,c);
30     }
31     for(int i=1;i<=n;i++){
32         for(int j=1;j<=m;j++){
33             d[i][j]+=d[i-1][j]+d[i][j-1]-d[i-1][j-1];
34         }
35     }
36     for(int i=1;i<=n;i++){
37         for(int j=1;j<=m;j++){
38             cout<<d[i][j]<<" ";
39         }
40         cout<<endl;
41     }
42     return 0;
43 }
原文地址:https://www.cnblogs.com/wydxry/p/15786532.html