hdu3265 矩形面积并
2012-10-31 20:29
127 查看
很简单的扫描线,不过做的我蛋蛋都碎了,首先要考虑被剪掉边界了,然后数据用double居然wrong,最后还是用__int64才过,各种坑爹啊!!!
ACcode:
ACcode:
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #define LL __int64 using namespace std; const int size=55555; struct Line { int lx,rx,y; int f; Line() {} Line(int a,int b,int c,int d):lx(a),rx(b),y(c),f(d) {} bool operator < (const Line &cmp) const { return y<cmp.y; } } line[size<<3]; int cover[size<<4],len[size<<4],X[size<<2]; void PushUp(int rt,int l,int r) { if (cover[rt]>0) len[rt]=X[r+1]-X[l]; else if (l==r) len[rt]=0; else len[rt]=len[rt<<1]+len[rt<<1|1]; } void update(int rt,int l,int r,int L,int R,int v) { if (L<=l&&r<=R) { cover[rt]+=v; PushUp(rt,l,r); return ; } int m=(l+r)>>1; if (L<=m) update(rt<<1,l,m,L,R,v); if (R>m) update(rt<<1|1,m+1,r,L,R,v); PushUp(rt,l,r); } int Fin(int key,int k) { int l=0,r=k; while (l<=r) { int m=(l+r)>>1; if (X[m]==key) return m; else if (X[m]<key) l=m+1; else r=m-1; } return -1; } int main() { int n,m,k,i,L,R; __int64 ans; int x1,x2,x3,x4,y1,y2,y3,y4; while (scanf("%d",&n)&&n) { memset(len,0,sizeof(len)); memset(cover,0,sizeof(cover)); for (k=m=i=0; i<n; i++) { scanf("%d %d %d %d %d %d %d %d", &x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4); X[k++]=x1; X[k++]=x2; X[k++]=x3; X[k++]=x4; line[m++]=Line(x1,x3,y1,1); line[m++]=Line(x1,x3,y2,-1); line[m++]=Line(x3,x4,y1,1); line[m++]=Line(x3,x4,y3,-1); line[m++]=Line(x3,x4,y4,1); line[m++]=Line(x3,x4,y2,-1); line[m++]=Line(x4,x2,y1,1); line[m++]=Line(x4,x2,y2,-1); } sort(X,X+k); k=unique(X,X+k)-X-1; sort(line,line+m); for (ans=i=0; i<m-1; i++) { L=Fin(line[i].lx,k); R=Fin(line[i].rx,k)-1; if (L<=R) update(1,0,k,L,R,line[i].f); ans+=1ll*len[1]*(line[i+1].y-line[i].y); } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- 扫描线 求挖空矩形合并面积 hdu3265 Posters
- HDU3265(线段树+扫描线+挖空矩形面积并)
- hdu3265(线段树求矩形面积并)
- hdu3265-Posters 线段树+离散化 求矩形面积并
- HDU3265 Posters(线段树,扫描线,矩形面积并)
- Raptor实践参考:求矩形面积的过程
- 矩形的面积
- FAFU-1398 面积 矩形面积并 线段树+扫描线
- codeforces281CRectangle Puzzle+矩形旋转+面积交
- 第五周 矩形长宽求面积
- 蓝桥杯练习(vip) 矩形面积交
- HDU 1255 矩形覆盖面积(线段树)
- leetcode_223. Rectangle Area 求两个矩形覆盖的面积之和
- codevs3044 矩形面积求并(线段数+扫描线+离散化)
- 求直方图中最大矩形面积(C语言实现)
- hdu 5251 矩形面积 (旋转卡壳求最小面积外接矩形)
- 基础练习 矩形面积交
- 一条直线若能平分矩形面积,则它必然经过矩形的中心
- 51nod-1102 . 面积最大的矩形&&hdu-1506
- 扫描线求矩形面积并,使用线段树维护(感觉非常详细)