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

2021-08-17 09:09:55 字數 1127 閱讀 9241

題意: 給你n個矩形的左上角座標和右下角座標問你復合矩形中覆蓋過至少兩次的區域的面積.

思路:還是掃瞄線,不過線段樹中多存了乙個變數,ss表示的是覆蓋過至少兩次的面積,他是怎麼算出來的呢?

首先我們的線段樹里有乙個cnt變數如果他不等於0就表示他的區間被完全覆蓋,那麼當他的cnt>1就表示他被完全覆蓋了至少兩次以上那麼我們就可以合併ss的長度,如果等於1呢?就表示他的整個區間被覆蓋了一次,那麼我們找他的兒子區間的覆蓋的區間相加就是兩次的了,那如果等於0呢,就表示他沒有被完全覆蓋,那麼就加上他的兒子區間上的覆蓋兩次以上的區間就好了,**上面有上**把:

#include #include #include #include #define lson l , m, rt<<1

#define rson m+1,r,rt<<1|1

using namespace std;

const int maxn = 2000+10;

struct seg

seg(double a,double b,double c,int d):l(a),r(b),h(c),f(d){}

bool operator < (const seg &cmp) const

}e[maxn];

struct node

edg[maxn<<2];

double x[maxn];

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

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

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

if(m>=l) update(l,r,lson,val);

if(r>m) update(l,r,rson,val);

pushdown(l,r,rt);

}int main()

sort(x,x+cnt);

sort(e,e+cnt);

int m = unique(x,x+cnt) - x;

double ans = 0;

for(int i = 0 ; i < cnt ; i ++)

printf("%.2lf\n",ans);

}}

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...