P3397 地毯(二維差分)

2021-10-05 09:32:53 字數 1500 閱讀 5525

題意:在乙個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...