博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1542 Atlantis 线段树--扫描线求面积并
阅读量:5978 次
发布时间:2019-06-20

本文共 1964 字,大约阅读时间需要 6 分钟。

There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe different regions of Atlantis. Your friend Bill has to know the total area for which maps exist. You (unwisely) volunteered to write a program that calculates this quantity.

题意:给出若干个矩形,求他们的总面积,即矩形的面积并

求面积并是线段树-扫描线的裸题

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int maxm=20005; 7 8 int cov[maxm<<2]; 9 double y[maxm],st[maxm];10 11 struct seg{12 double x,y1,y2;13 int c;14 bool operator < (const seg a)const{15 return x
0)st[o]=y[r]-y[l];21 else if(cov[o]==0){22 if(l+1==r)st[o]=0;23 else st[o]=st[o<<1]+st[o<<1|1];24 }25 }26 27 void update(int o,int l,int r,seg a){28 if(a.y1<=y[l]&&a.y2>=y[r]){29 cov[o]+=a.c;30 pushup(o,l,r);31 return;32 }33 if(l+1==r)return;34 int m=l+((r-l)>>1);35 if(a.y1
<<1,l,m,a);36 if(a.y2>y[m])update(o<<1|1,m,r,a);37 pushup(o,l,r);38 }39 40 int main(){41 int n;42 int c=0;43 while(scanf("%d",&n)!=EOF&&n){44 memset(st,0,sizeof(st));45 memset(cov,0,sizeof(cov));46 for(int i=1;i<=n;++i){47 double x1,y1,x2,y2;48 scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);49 s[2*i-1].x=x1;s[2*i-1].y1=y1;s[2*i-1].y2=y2;s[2*i-1].c=1;50 y[2*i-1]=y1;51 s[2*i].x=x2;s[2*i].y1=y1;s[2*i].y2=y2;s[2*i].c=-1;52 y[2*i]=y2;53 }54 sort(s+1,s+2*n+1);55 sort(y+1,y+2*n+1);56 double ans=0;57 int cnt=1;58 for(int i=2;i<=2*n;++i){59 if(y[i]!=y[i-1])y[++cnt]=y[i];60 }61 for(int i=1;i<2*n;++i){62 update(1,1,cnt,s[i]);63 ans+=st[1]*(s[i+1].x-s[i].x);64 }65 printf("Test case #%d\n",++c);66 printf("Total explored area: %.2lf\n\n",ans);67 }68 return 0;69 }
View Code

 

转载于:https://www.cnblogs.com/cenariusxz/p/6592198.html

你可能感兴趣的文章
JavaScript高级程序设计学习(一)之介绍
查看>>
transform,transition,animation的混合使用——结业篇
查看>>
C# 实现对PPT插入、编辑、删除表格
查看>>
Python基础系列-判断字段是否IP
查看>>
python并发学习总结
查看>>
GAN如此简单的PyTorch实现,一张脸生成72种表情(附代码)
查看>>
如何用web3j编译solidity智能合约源代码
查看>>
第147天:web前端开发中的各种居中总结
查看>>
Java之:强引用、弱引用、软引用、虚引用
查看>>
go-fastdfs v1.2.6 发布,支持自定义认证,高性能、高可靠分布式文件系统
查看>>
##II 第四单元##管理系统中的简单分区和文件系统
查看>>
用flash测试你的ircd
查看>>
白话红黑树系列之二——红黑树的构建
查看>>
客户的一张表中出现重复数据,而该列由唯一键约束,重复值如何产生的呢?...
查看>>
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
查看>>
OnePlus安装Kali-NetHunter
查看>>
ios7 - Custom UItabbar has a gap in the bottom
查看>>
git 学习
查看>>
Spring .NET 1.2.0 发布
查看>>
MySQL索引失效的几种情况
查看>>