hdu1542(線段樹 掃瞄線)

2021-07-05 02:40:42 字數 857 閱讀 3414

裸的掃瞄線,學習掃瞄線的題目。具體掃瞄線的原理我不講了,我是看大神們的部落格懂得,就算寫也沒大神屌。下面我給出我的**,裡面的注釋是我認為比較重要的地方

#include #include#include#includeusing namespace std;

const int max=210;

int n;

double y[max];

double sum=0;

typedef struct

}node;

node no[max];

typedef struct

}p;p per[4*max];

bool cmp(const node &n1,const node &n2)

void update(int id,node node)

if(per[id<<1].realright>=node.y2)

update(id<<1,node);

else

if(per[id<<1|1].realleft<=node.y1)

update(id<<1|1,node);

else

get_len(id);

}int main()

sort(no,no+t,cmp);

sort(y,y+t);

build(1,0,t-1);

printf("test case #%d\n",num++);

update(1,no[0]);

for(int i=1;iprintf("total explored area: %.2lf\n\n",sum);

}return 0;

}

hdu 1542 掃瞄線 線段樹

題目大意 求矩形面積的並 思路 按y軸排序,然後將x投影到線段樹上做乙個線段覆蓋問題即可 注意 為了避免重複,線段座標右端點是開區間,更新時需要加上1 include include include include include define fo i,a,b for int i a i b i ...

hdu1542(線段樹 掃瞄線)

題目連線 又看到了幾個月前做的題,感覺那時候就是個sb 也怪自己剛開始沒搞清楚線段樹,瞎摸索 用連續線段樹很好理解這個題,之前的 稍微改了一下就好理解多了 1 include2 include3 include4 define lson l,m,rt 1 5 define rson m,r,rt 1...

HDU 1542 掃瞄線 線段樹優化

有些需要說明的地方 以前寫線段樹時線段樹的每個葉節點為乙個數字,代表乙個區域 7 代表第七個單位長度區域 本題不同在於,最小單位區域必須有兩點代表 2 3 代表從2到3 的乙個區域 上篇掃瞄線演算法複雜度為o n 2 本題用離散化法加線段樹優化為nlog n include include incl...