hdu 1542 掃瞄線 線段樹

2021-08-07 11:09:47 字數 1229 閱讀 6825

題目大意:求矩形面積的並

思路:按y軸排序,然後將x投影到線段樹上做乙個線段覆蓋問題即可

注意:為了避免重複,線段座標右端點是開區間,更新時需要加上1

#include

#include

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

#define fod(i,a,b) for(int i=a;i>=b;i--)

using namespace std;

const int n=2e2+10;

typedef long long ll;

struct line

line(double x1=0,double x2=0,double h=0,int f=0):x1(x1),x2(x2),h(h),f(f){}

}l[n];

struct nodetr[n<<2];

int n,kase=0; double tmp[n];

void build(int

x,int l,int r)

int mid=(l+r)>>1;

build(x

<<1,l,mid);

build(x

<<1|1,mid+1,r);

}void pushup(int

x)void update(int

x,int ql,int qr,int delta)

if(qr<=mid) update(x<<1,ql,qr,delta);

else if(ql>mid) update(x

<<1|1,ql,qr,delta);

else

pushup(x);

}int main()

sort(l,l+2

*n);

sort(tmp,tmp+2

*n);

int sz=unique(tmp,tmp+2

*n)-tmp;

build(1,0,sz-1);

double ans=0.0;

for(int i=0;i*2-1;i++)

printf("test case #%d\ntotal explored area: %.2lf\n\n",++kase,ans);

}return

0;}

hdu1542(線段樹 掃瞄線)

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

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