博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1542
阅读量:5058 次
发布时间:2019-06-12

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

题意:

求所给矩形的覆盖面积

题解:

利用扫描线的思想,先将坐标离散化,之后以y轴分成多个矩形求解,可以让下边界+1上边界-1

问题就转化为了:求区间中有多少个非0数,要求支持区间+1 -1操作

我们可以通过维护区间最小值以及最小值的个数来完成这件事情

代码:

#include
#include
#include
#include
#include
#define maxn 5000#define INF 59999999#define eps 1e-6#define mid (h+t)/2using namespace std;struct re { double a;int b;}a[maxn],b[maxn];struct ree{ int h,t,x,lazy; double sum,tot;}p[maxn*4];double c[maxn];int a1[maxn];bool cmp(re x,re y){ if (x.a
t|| p[x].t
t||p[x].t
>n&&n!=0){ o++; memset(p,0,sizeof(p)); for (int i=1;i<=2*n;i++) a[i].b=i,b[i].b=i; for (int i=1;i<=n;i++) { cin>>a[2*i-1].a>>b[2*i-1].a>>a[2*i].a>>b[2*i].a; } sort(a+1,a+1+2*n,cmp); sort(b+1,b+1+2*n,cmp); int ll=0; a[0].a=INF; for (int i=1;i<=2*n;i++) { if (abs(a[i].a-a[i-1].a)>eps) ll++; a1[a[i].b]=ll; c[ll]=a[i].a; } double ans=0; build(1,1,ll-1); for (int i=1;i<2*n;i++) { int pp,tmp=b[i].b; if (tmp%2==1) pp=1 ;else pp=-1; insert(1,a1[(tmp+1)/2*2-1],a1[(tmp+1)/2*2]-1,pp); ans+=(b[i+1].a-b[i].a)*query(1,1,ll-1); } cout<<"Test case #"<
<
<<"Total explored area: " ; printf("%.2f\n\n",ans); }}
View Code

 

转载于:https://www.cnblogs.com/yinwuxiao/p/8387182.html

你可能感兴趣的文章
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
ios封装静态库技巧两则
查看>>