HDU 1542 Atlantis 矩形面積並

2022-05-28 12:54:14 字數 1400 閱讀 5916

題意:  有 n  個矩形,求總的覆蓋面積。

分析: 離散化浮點數座標,以 x 軸 建樹, 將每個矩形拆分成上下兩條線段,從下向上掃瞄。

/*

*************************************

* 離散化浮點數,把矩形分成上邊和下邊, *

* 按 x 座標建樹,從下向上掃瞄 *

**************************************

*/#include

#include

#include

#include

#define clr(x)memset(x,0,sizeof(x))

using

namespace

std;

const

int maxn=2222

;int cnt[maxn<<2]; //

該區間下邊比上邊多幾個

double sum[maxn<<2]; //

該區間內被覆蓋的線段總長度

double x[maxn]; //

儲存所有 x 座標

struct

node

}s[maxn];

void pushup(int l,int r,int

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

rt)

int m=(l+r)>>1

;

if(l<=m)

update(l,r,c,l,m,rt

<<1

);

if(r>m)

update(l,r,c,m+1,r,rt<<1|1

); pushup(l,r,rt);

}int b_search(double key,int n,double

x)

return -1;}

intmain()

sort(x,x+m);

sort(s,s+m);

k=1;

for(i=1;i)

if(x[i]!=x[i-1

]) x[k++]=x[i];

clr(sum); clr(cnt);

res=0

;

for(i=0;i1;i++)

printf(

"test case #%d\n

",ca++);

printf(

"total explored area: %.2lf\n\n

",res);

}return0;

}

HDU 1542 Atlantis 線段樹 掃瞄線

題意 求二維座標下n個矩陣的面積並 分析 如何求矩陣並的面積呢?如下圖 我們可以利用掃瞄線來做,什麼是掃瞄線?你可以把這些矩陣合併後看做乙個容器 現在你要把這些容器注滿水 很明顯 水先充滿的地方為 更據這樣的思想就可以把原圖分為下面幾個部分惹 那麼如何用 實現呢?我們需要乙個seg結構體儲存x方向線...

hdu 1542 Atlantis(求矩形面積並)

分別記錄x座標和y座標,將其分別按照從左到有的方向排序。然後對於乙個輸入的矩形的x,y座標範圍內的下標進行標記。以兩個相鄰的座標為最小單位分割圖形,最後求總面積。include include include define n 205 int mark n n double a n b n stru...

面積並問題 HDU 1542 Atlantis

hdu 1542 傳送門 題目大意就是幾個矩形相交,然後求出總的覆蓋面積,覆蓋多次的按一次算。典型的面積並問題。大體思路 記錄所給的點,排序,去掉重複的點,對點編號,可以理解成存放點的陣列的下表即為編號。對y軸建立線段樹,利用線段樹計算面積。ac code 1 include 2 include 3...