HDU 1542 掃瞄線 線段樹優化

2021-06-25 21:26:55 字數 770 閱讀 2911

有些需要說明的地方:

以前寫線段樹時線段樹的每個葉節點為乙個數字,代表乙個區域 (7 ,代表第七個單位長度區域);

本題不同在於,最小單位區域必須有兩點代表(2-3 代表從2到3 的乙個區域)

上篇掃瞄線演算法複雜度為o(n^2) 本題用離散化法加線段樹優化為nlog(n);

#include #include #include #include using namespace std;

#define lson l,m,rt<<1

#define rson m,r,rt<<1|1

#define inf 1000000100

const int maxn = 210;

double ty[maxn];

int kk;

int find(double value)

double ans;

int ql,qr,fff;

double x;

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

else

//}return ;

}int m=(r+l)>>1;

if(qlm) update(rson);

}int main()

sort(ty+1,ty+id);

sort(line+1,line+id);

kk = unique(ty+1,ty+id)-(ty+1);

build(1,kk,1);

ans=0;

for(int i=1;i

hdu1542(線段樹 掃瞄線)

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

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...