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

2021-07-06 00:00:20 字數 1186 閱讀 7068

題意:給出n個矩形,求出至少被兩塊矩形覆蓋的面積。

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

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6

#define ll long long

#define pii pair//#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

const int maxn = 2100;

//const int inf = 0x3f3f3f3f;

struct node segtree[maxn*4];

struct line

} line[maxn];

double y[maxn];

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

void cal(int o)

else if(t.c == 1)

else

}void update(int o, line e)

if(e.y2 <= segtree[o<<1].rf) update(o<<1, e);

else if(e.y1 >= segtree[(o<<1)|1].lf) update((o<<1)|1, e);

else

cal(o);

}int n, tot;

int main()

sort(y+1, y+tot+1);

sort(line+1, line+tot+1);

build(1, 1, tot);

double ans = 0;

update(1, line[1]);

for(int i = 2; i <= tot; i++)

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

} return 0;

}



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 覆蓋的面積 線段樹 掃瞄線

還是先離散化座標,然後用線段樹掃瞄線 其中sum代表被覆蓋過一次的長度,sum2代表被覆蓋過2次及以上的長度。然後注意pushup操作比較麻煩。id sdj22251 prog subset lang c include include include include include include...