hdu 1255 覆蓋的面積 線段樹 掃瞄線

2021-06-23 05:05:36 字數 888 閱讀 4487

一直想搞線段樹的掃瞄線,這道題算是入門了吧。

這題需要用到 離散化,因為座標是浮點數。還有就是線段樹中的掃瞄線的知識,另外,這題需要求重複的面積和,所以在運用線段樹的時候需要更新到葉子節點。

每乙個葉子節點儲存的是離散化後長度為1的線段。跟區間更新啥的還是挺像的,就是那些乙個葉子節點表示乙個點,這個是表示一小段線段。另外在分左右兒子的時候,掃瞄線取的是閉區間,例如:如果要把線段[1,10]分為左右兒子,那麼左兒子分得區間 [1,5] ,右兒子分得區間 [5,10]。

哦也~線段樹掃瞄線也沒有想象中的難嘛。說白了就是用線段樹儲存底的有效長度,然後乘以一段高度,求得的若干小的面積的和。>~<

**貼之:

#include#include#include#includeusing namespace std;

#define maxn 37000

#define lson l,m,rt<<1

#define rson m,r,rt<<1|1//與一般的線段樹不同之處

int col[maxn];

double sum[maxn],x[2222];

int cnt;

void pushup(int rt,int r,int l)

void build(int l,int r,int rt)

void update(int l,int r,int rt,int l,int r,int c)

int m = (l+r)>>1;

if(m>l)update(lson,l,r,c);

if(m>1;

int ret=0;

while(l<=r)

return -1;

}bool cmp(node a,node b)

{ return a.h

hdu 1255 覆蓋的面積 線段樹

記錄3個變數。sum i 當前區間被覆蓋2次及兩次以上的面積。num i 當前區間被覆蓋1次及一次以上的面積。cover i 覆蓋的lazy標記。對於每乙個區間.更新操作如下 void push up int now if cover rt 1 if cover rt 2 那麼剩下的問題就是簡單的區...

hdu 1255 覆蓋的面積(線段樹求面積交)

給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.雖說覆蓋兩次區域的面積,但是這道題實際上就是求矩形的面積交。膜拜能夠想出這種解法的神牛,竟然能把實際的東西用這麼抽象的語言表示出來,實在是佩服,現在關於掃瞄線的題才做了幾道,沒有對其深刻理解,但是多練總可以理解的,奮鬥吧!acmer!我是...

HDU 1255 覆蓋的面積(線段樹求矩形面積交)

題意 給出n個矩形,求出至少被兩塊矩形覆蓋的面積。思路 跟面積並類似的做法,不同的是每個節點要額外維護乙個至少被覆蓋兩次的長度dcnt,此外還是要維護至少覆蓋一次的長度cnt,然後每次由當前結點的cover標記和子節點的dcnt,cnt值來推出當前結點的dcnt,cnt值。include inclu...