2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles(面积并)
来源:互联网 发布:java开发中常见的异常 编辑:程序博客网 时间:2024/05/19 02:45
题目链接:Overlapping Rectangles 面积并模板题,类似题还有HDU1542
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<cmath>#include<map>#include<set>#include<cstdlib>#define mem(a,b) memset(a,b,sizeof(a))#define INF 0x7ffffffftypedef long long ll;using namespace std;const int maxn = 2010;struct Seg{ double l; double r; double h; int s; Seg(){}; Seg(double a,double b,double c,int d) : l(a),r(b),h(c),s(d){}; bool operator < (const Seg &cmp) const{ return h < cmp.h; }}ss[maxn<<2];double X[maxn<<2];double sum[maxn<<2];int cnt[maxn<<2];int bs(double key,int kind,double X[]){ int l = 0, r = kind-1, mid; while(l <= r){ mid = (l+r)>>1; if(X[mid] == key) return mid; else if(X[mid] < key) l = mid+1; else r = mid-1; } return -1;}void PushUp(int rt,int L,int R){ if(cnt[rt]) sum[rt] = X[R+1] - X[L]; else if(L == R) sum[rt] = 0; else sum[rt] = sum[rt<<1] + sum[rt<<1|1];}void update(int l,int r,int c,int L,int R,int rt){ if(l <= L && R <= r){ cnt[rt] += c; PushUp(rt,L,R); return; } int mid = (L+R)>>1; if(l <= mid) update(l,r,c,L,mid,rt<<1); if(mid < r) update(l,r,c,mid+1,R,rt<<1|1); PushUp(rt,L,R);}int main(){ int n,m; double x1,y1,x2,y2; while(scanf("%d",&n)){ if(n == 0){ puts("*"); break; } m = 0; for(int i = 0; i < n; i++){ scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); X[m] = x1; ss[m++] = Seg(x1,x2,y1,1); X[m] = x2; ss[m++] = Seg(x1,x2,y2,-1); } sort(X,X+m); sort(ss,ss+m); int kind = 1; for(int i = 1; i < m; i++){ if(X[i] != X[i-1]) X[kind++] = X[i]; } memset(cnt,0,sizeof(cnt)); memset(sum,0,sizeof(sum)); double ans = 0; for(int i = 0; i < m-1; i++){ int l = bs(ss[i].l,kind,X); int r = bs(ss[i].r,kind,X) - 1; if(l <= r){ update(l,r,ss[i].s,0,kind-1,1); } ans += sum[1]*(ss[i+1].h - ss[i].h); } printf("%.0lf\n",ans); } return 0;}
阅读全文
0 0
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles(面积并)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles (面积并+线段树)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles(扫描线)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛: F. Overlapping Rectangles(线段树)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F.Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F题 Overlapping Rectangles(线段树)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation 和 F. Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛:Overlapping Rectangles
- 2017 icpc 南宁赛区 F.Overlapping Rectangles(重叠矩形的最大面积+线段树模板)
- 矩形面积并集,2017ICPC网络赛(南宁)Overlapping Rectangles
- 2017 ACM-ICPC亚洲区(南宁赛区)网络赛 F.Frequent Subsets Problem
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F题
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛
- 自由幻想UI之角色界面
- Linux Shell常用命令总结
- StrutsPrepareAndExecuteFilter的作用
- FileProvider的拍照和打开相册功能
- 配置都对,jps查看datanode没有启动,为什么
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 F. Overlapping Rectangles(面积并)
- Java StringBuffer 和 StringBuilder 类
- 发布node项目到npm
- (spring-data-redis)SSM框架下使用redis作为mybatis的二级缓存
- hdu2883 网络流 离散化 建图
- ios-OC和Swift混编调用分类问题
- php单张图片上传插件免刷新,兼容手机,可实现类似微信图片上传的体验
- Java 数组
- Recurrent neural networks deep dive