題目大意:求矩形面積的並
思路:按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...