hdu 1255
覆盖的面积
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5019 Accepted Submission(s): 2515

注意:本题的输入数据较多,推荐使用scanf读入数据.
5
1 1 4 2
1 3 3 7
2 1.5 5 4.5
3.5 1.25 7.5 4
6 3 10 7
3
0 0 1 1
1 0 2 1
2 0 3 1
0.00
1255 ( 覆盖的面积 ) Judge Status :
Accepted
RunId : 17414345 Language : G++ Author :
ksq2013
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
double yy[2100];
struct Line{
int f;
double x,y1,y2;
bool operator<(const Line h)const{
return x<h.x;
}
}line[2100];//index:m;
struct Seg{
int f;
double len,nlen;
}tr[10100];
void build(int s,int t,int k)
{
tr[k].f=tr[k].len=tr[k].nlen=0;
if(s+1==t)return;
int m=(s+t)>>1;
build(s,m,k<<1);
build(m,t,k<<1|1);
}
int bin(double x,int l,int r)
{
while(l<=r){
int mid=(l+r)>>1;
if(yy[mid]==x)return mid;
if(yy[mid]<x)l=mid+1;
else r=mid-1;
}return l;
}
void pushup(int s,int t,int k)
{
if(tr[k].f>1)tr[k].nlen=tr[k].len=yy[t]-yy[s];
else{
if(tr[k].f==1){
tr[k].len=yy[t]-yy[s];
if(s+1==t)tr[k].nlen=0;
else tr[k].nlen=tr[k<<1].len+tr[k<<1|1].len;
}
else{
if(s+1==t)tr[k].nlen=tr[k].len=0;
else{
tr[k].len=tr[k<<1].len+tr[k<<1|1].len;
tr[k].nlen=tr[k<<1].nlen+tr[k<<1|1].nlen;
}
}
}
}
void update(int s,int t,int k,int l,int r,int f)
{
if(l<=s&&t<=r){
tr[k].f+=f;
pushup(s,t,k);
return;
}int m=(s+t)>>1;
if(l<m)update(s,m,k<<1,l,r,f);
if(m<r)update(m,t,k<<1|1,l,r,f);
pushup(s,t,k);
}
int main()
{
int T,n;
double x1,y1,x2,y2;
scanf("%d",&T);
for(;T;T--){
scanf("%d",&n);
int m=0;
for(int i=1;i<=n;i++){
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); yy[++m]=y1;
line[m].f=1;//initial number:0;first variable:f;
line[m].x=x1;
line[m].y1=y1;
line[m].y2=y2; yy[++m]=y2;
line[m].f=-1;
line[m].x=x2;
line[m].y1=y1;
line[m].y2=y2;
}
sort(1+yy,1+m+yy);//data input;
sort(1+line,1+m+line);
int k=1;
for(int i=2;i<=m;i++)
if(yy[i-1]!=yy[i])yy[++k]=yy[i];//end; double ans=0;
build(1,k,1);//build a segment_tree;
for(int i=1;i<=m;i++){
update(1,k,1,bin(line[i].y1,1,k),bin(line[i].y2,1,k),line[i].f);//updating segments by binary search;
ans+=tr[1].nlen*(line[i+1].x-line[i].x);
} printf("%.2lf\n",ans);//output the ans;
}
return 0;
}
hdu 1255的更多相关文章
- hdu 1255 覆盖的面积(线段树 面积 交) (待整理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 Description 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. In ...
- hdu 1255 覆盖的面积(求覆盖至少两次以上的面积)
了校赛,还有什么途径可以申请加入ACM校队? 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 扫描线三巨头 hdu1928&&hdu 1255 && hdu 1542 [POJ 1151]
学习链接:http://blog.csdn.net/lwt36/article/details/48908031 学习扫描线主要学习的是一种扫描的思想,后期可以求解很多问题. 扫描线求矩形周长并 hd ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
- HDU 1255 覆盖的面积(线段树+扫描线)
题目地址:HDU 1255 这题跟面积并的方法非常像,仅仅只是须要再加一个变量. 刚開始我以为直接用那个变量即可,仅仅只是推断是否大于0改成推断是否大于1.可是后来发现了个问题,由于这个没有下放,没延 ...
- 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))
扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...
- HDU 1255 覆盖的面积 (线段树+扫描线+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...
- hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memo ...
- hdu 1255 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255 #include <cstdio> #include <cstring> #inc ...
- hdu 1255(线段树 扫描线) 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255 典型线段树辅助扫描线,顾名思义扫描线就是相当于yy出一条直线从左到右(也可以从上到下)扫描过去,此时先将所 ...
随机推荐
- MapGuide Maestro 5.1发布了
MapGuide Maestro最为MapGuide开源版的authoring工具真是发展迅速,有些功能比Infrastructure Studio还给力,现在5.1版已经发布了.大家可以到http: ...
- android加固系列—1.如何检验so文件是否加壳成功
程序对so文件加壳后,如何验证是否加壳成功呢,首先除了能在应用中正常运行外,还要用IDA来检测: 绿色乱码表示rr这个函数成功加密: 工具下载,可支持动态调试版:
- Android 常用抓包工具介绍之Charles
➠更多技术干货请戳:听云博客 Charles是一款抓包修改工具,相比起TcpDump,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!前面介绍了如 ...
- (视频) 开源,免费和跨平台 - MVP ComCamp 2015 KEYNOTE
2015年1月31日,作为KEYNOTE演讲嘉宾,我和来自全国各地的开发人员分享了作为一名MVP的一些体会. Keynote – Open Source, Free Tools and Cross P ...
- nodejs学习笔记(2)--Express下安装模版引擎ejs
成功安装完express后,输入express -help,根据提示安装ejs(如下图): 根据提示-e实现安装ejs,注意此处有坑:之前安装的时候根据教程(node.js开发指南第五章5.2.2节) ...
- 表单和iframe的使用
图片热点: 规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果.示例: 网页划区: 在一个网页里,规划出一个区域用来展示另一个网页的内容.示例: 网页的拼接: 在一个网络页面 ...
- 用批处理来自动化项目编译及部署(附Demo)
阅读目录 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 介绍 详细 处理 结论 Demo下载 介绍 一个项目从立项开始,可能就已经根据公司的配置模板将 ...
- innobackupex --rsync 报错 Error: can't create file (null)/xtrabackup_rsyncfiles_pass1
在使用最新版的innobackupex(2.3.2): innobackupex /backup --rsync --user=xx --password=xxx 备份时报错: Error: can' ...
- android The public type classname must be defined in its own file 报错
The public type classname must be defined in its own file classname 为类名 错误提示,公用的类必髯有自己拥有独立.java文件 解 ...
- js中正则表达式的模式匹配
参考Javascript权威指南(第6版)第10章 1.正则表达式的定义 正则表达式有两种定义方法,通常使用直接量方式. (1)直接量 var pattern = /\d$/; var pattern ...