1. 程式人生 > 其它 >Part2.8 P3397 地毯 【二維差分】

Part2.8 P3397 地毯 【二維差分】

原題連結:P3397 地毯 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

題意:

在 n × n 的格子上有 m 個地毯。

給出這些地毯的資訊,問每個點被多少個地毯覆蓋。

思路:二維差分優化使區間修改複雜度變為O(1),最後再求二維字首和

評價:二維差分板子

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 //#define mod 998244353
 4 //const int INF = 1e8;
 5 typedef long long ll;
 6 int n,m,a[1005][1005],b[1005][1005];
7 void insert(int x1,int y1,int x2,int y2,int c) 8 { 9 b[x1][y1]+=c; 10 b[x1][y2+1]-=c; 11 b[x2+1][y1]-=c; 12 b[x2+1][y2+1]+=c; 13 } 14 int main() 15 { 16 scanf("%d%d",&n,&m); 17 for(int i=1;i<=m;i++) 18 { 19 int x1,y1,x2,y2; 20 scanf("%d%d%d%d
",&x1,&y1,&x2,&y2); 21 insert(x1,y1,x2,y2,1); 22 } 23 for(int i=1;i<=n;i++) 24 { 25 for(int j=1;j<=n;j++) 26 { 27 b[i][j]+=b[i][j-1]+b[i-1][j]-b[i-1][j-1]; 28 printf("%d ",b[i][j]); 29 } 30 printf("\n");
31 } 32 return 0; 33 }