Part2.8 P3397 地毯 【二維差分】
阿新 • • 發佈:2022-03-25
原題連結: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 }