hdu 1255 覆蓋的面積

2021-06-22 18:50:06 字數 2012 閱讀 9462

與poj1151略有不同 由於是大於等於2 的有效 所以應該更新到點

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

const int dir[4][2]=;

#define maxn 2005

struct tree

tree[maxn*4];

struct line

line[maxn];

bool cmp(line a,line b)//sort排序的函式

double y[maxn];//記錄y座標

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

void calen(int root)

if(tree[root].l+1==tree[root].r) tree[root].cnt=0;

else tree[root].cnt=tree[root<<1].cnt+tree[root<<1|1].cnt;

}void update(int root,struct line e)

if(e.y2<=tree[root<<1].rf)update(root<<1,e);

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

else

calen(root);

}int main()

k--;

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

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

build(1,k,1);

update(1,line[1]);

double ans=0;

for(i=2;i<=k;i++)

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

} return 0;

}

也可以更新到段,通過覆蓋一層的面積去更新覆蓋兩層的面積

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

const int dir[4][2]=;

#define maxn 2005

struct tree

tree[maxn*4];

struct line

line[maxn];

bool cmp(line a,line b)//sort排序的函式

double y[maxn];//記錄y座標

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

void calen(int root)

else if(tree[root].c==1)

if(tree[root].l+1==tree[root].r)

else }

void update(int root,struct line e)

if(e.y2<=tree[root<<1].rf)update(root<<1,e);

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

else

calen(root);

}int main()

k--;

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

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

build(1,k,1);

update(1,line[1]);

double ans=0;

for(i=2;i<=k;i++)

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

} return 0;

}

HDU 1255 覆蓋的面積

題目鏈結點這裡 這道題,很久以前做過,當時寫了個暴力,居然過了,然後一直想寫下線段樹的,結果一直被各種事搞得忘了。現在終於填坑了。include include include includeusing namespace std define mem x,y memset x,y,sizeof x...

HDU 1255 覆蓋的面積

題目 給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.input 輸入資料的第一行是乙個正整數t 1 t 100 代表測試資料的數量.每個測試資料的第一行是乙個正整數n 1 n 1000 代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的左上角座標和右下角座標...

HDU 1255 覆蓋的面積

problem description 給定平面上若干矩形,求出被這些矩形覆蓋過至少兩次的區域的面積.輸入資料的第一行是乙個正整數t 1 t 100 代表測試資料的數量.每個測試資料的第一行是乙個正整數n 1 n 1000 代表矩形的數量,然後是n行資料,每一行包含四個浮點數,代表平面上的乙個矩形的...