題意:在乙個n*n的地圖中,有m張地毯,每張矩形地毯的左上角和右下角已知,輸出最後整個地圖的每個點有多少張地毯覆蓋。
思路:二維差分很明顯。二維字首和、二維線段樹也可以做。 我們首先要用乙個陣列,記錄變化。對於(x1,y1)到(x2,y2)這一區間全部加1的話,我們需要a[x1][y1]+=1,a[x2+1][y2+1]+=1,a[x1][y2+1]-=1,a[x2+1][y1]-=1;這樣我們算二維字首和的時候就只會對這個區間裡的數造成影響。
#include
#define endl '\n'
#define null null
#define ls p<<1
#define rs p<<1|1
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
#define int long long
#define vi vector
#define mii map
#define pii pair
#define ull unsigned long long
#define pqi priority_queue
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ct cerr<<"time elapsed:"<<1.0*clock()/clocks_per_sec<<"s.\n";
char
*fs,
*ft,buf[
1<<20]
;#define gc() (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<20,stdin),fs==ft))?0:*fs++;
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}using
namespace std;
const
int n=
2e5+5;
const
int inf=
0x7fffffff
;const
int mod=
1e9+7;
const
double eps=
1e-6
;int a[
1005][
1005
],sum[
1005][
1005];
signed
main()
for(
int i=
1;i<=n;i++
) cout<}}
P3397 地毯 差分
題目背景 此題約為noip提高組day2t1難度。題目描述 在 n nn times nn n 的格仔上有 mmm 個地毯。給出這些地毯的資訊,問每個點被多少個地毯覆蓋。輸入格式 第一行,兩個正整數 n,mn,mn,m。意義如題所述。接下來 mmm 行,每行兩個座標 x1,y1 x 1,y 1 x1...
洛谷 P3397 地毯(二維差分)
題目描述 在n n的格仔上有m個地毯。給出這些地毯的資訊,問每個點被多少個地毯覆蓋。輸入格式 第一行,兩個正整數n m。意義如題所述。接下來m行,每行兩個座標 x1,y1 和 x2,y2 代表一塊地毯,左上角是 x1,y1 右下角是 x2,y2 輸出格式 輸出n行,每行n個正整數。第i行第j列的正整...
洛谷 P3397 地毯 二維差分標記
題目背景 此題約為noip提高組day2t1難度。題目描述 在n n的格仔上有m個地毯。給出這些地毯的資訊,問每個點被多少個地毯覆蓋。輸入輸出格式 輸入格式 第一行,兩個正整數n m。意義如題所述。接下來m行,每行兩個座標 x1,y1 和 x2,y2 代表一塊地毯,左上角是 x1,y1 右下角是 x...