hdu 1255 掃瞄線 線段樹計算矩形面積並

2021-09-12 19:45:34 字數 956 閱讀 1954

題目:

題意:給你n個矩形,要你計算這些矩形被覆蓋兩次以上部分的面積和。

做法:剛學的掃瞄線,留個板子和參考鏈結,很多地方容易出細節問題。

#include#define lson rt<<1

#define rson rt<<1|1

using namespace std;

const int maxn=1005;

struct segse[maxn*2];

int num[maxn<<3];

double once[maxn<<3],twice[maxn<<3];

bool cmp(seg a,seg b)

return -1;

}void deal(int rt,int l,int r)

void update(int ql,int qr,int l,int r,int v,int rt)

int mid=(l+r)/2;

if(ql<=mid) update(ql,qr,l,mid,v,lson);

if(qr>mid) update(ql,qr,mid+1,r,v,rson);

deal(rt,l,r);

}int main()

k--;

sort(se+1,se+1+k,cmp);

sort(x+1,x+1+k);

x[0]=-1;

m=0;

for(int i=1;i<=k;i++)

memset(num,0,sizeof(num));

memset(once,0,sizeof(once));

memset(twice,0,sizeof(twice));

double ans=0;

for(int i=1;iprintf("%.2f\n",ans);

}return 0;

}

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

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

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

一直想搞線段樹的掃瞄線,這道題算是入門了吧。這題需要用到 離散化,因為座標是浮點數。還有就是線段樹中的掃瞄線的知識,另外,這題需要求重複的面積和,所以在運用線段樹的時候需要更新到葉子節點。每乙個葉子節點儲存的是離散化後長度為1的線段。跟區間更新啥的還是挺像的,就是那些乙個葉子節點表示乙個點,這個是表...

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

題目大意 中文題 解題思路 記錄區間被cover的次數,區間的被cover1次的長度len,區間被cover2次或者2次以上的長度twice 所要求的覆蓋面積,就是求被cover兩次或者兩次以上的長度 高的和 首先判斷是否被cover過,先更新一下len 1.接著判斷一下是否被cover過次或者兩次...