有些需要說明的地方:
以前寫線段樹時線段樹的每個葉節點為乙個數字,代表乙個區域 (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...