題目:
題意:給你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過次或者兩次...