hdu 1255 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 100010
using namespace std; int t,n;
double Y[maxn],X[maxn];
struct point
{
double x;
double y_up;
double y_down;
int lr;
bool operator <(const point &a) const
{
return x<a.x;
}
}p[maxn*]; struct node
{
double x;
double y_up;
double y_down;
int cover;
bool flag;
}tree[maxn*]; void build(int i,int l,int r)
{
tree[i].x=-;
tree[i].y_up=Y[r];
tree[i].y_down=Y[l];
tree[i].cover=;
tree[i].flag=true;
if(l+==r)
{
tree[i].flag=false;
return ;
}
int mid=(l+r)>>;
build(i<<,l,mid);
build(i<<|,mid,r);
} double update(int i,double l,double r,double x,int lr)
{
if(tree[i].y_down>=r||tree[i].y_up<=l) return ;
if(!tree[i].flag)
{
if(tree[i].cover>)
{
tree[i].cover+=lr;
double sum=(x-tree[i].x)*(tree[i].y_up-tree[i].y_down);
tree[i].x=x;
return sum;
}
else
{
tree[i].cover+=lr;
tree[i].x=x;
return ;
}
}
else return update(i<<,l,r,x,lr)+update(i<<|,l,r,x,lr);
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int cnt=;
for(int i=; i<=n; i++)
{
double x1,y1,x2,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
p[cnt].x=x1;
p[cnt].y_down=y1;
p[cnt].y_up=y2;
p[cnt].lr=;
X[cnt]=x1;
Y[cnt++]=y1;
p[cnt].x=x2;
p[cnt].y_down=y1;
p[cnt].y_up=y2;
X[cnt]=x2;
p[cnt].lr=-;
Y[cnt++]=y2;
}
sort(Y,Y+cnt);
sort(X,X+cnt);
sort(p,p+cnt);
build(,,cnt-);
double ans=;
for(int i=; i<cnt; i++)
{
ans+=update(,p[i].y_down,p[i].y_up,p[i].x,p[i].lr);
}
printf("%.2lf\n",ans);
}
return ;
}
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 ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
- hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memo ...
- HDU 1255 覆盖的面积(线段树+扫描线)
题目地址:HDU 1255 这题跟面积并的方法非常像,仅仅只是须要再加一个变量. 刚開始我以为直接用那个变量即可,仅仅只是推断是否大于0改成推断是否大于1.可是后来发现了个问题,由于这个没有下放,没延 ...
- hdu 1255 覆盖的面积 (扫描线求矩形交)
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1255 覆盖的面积 ( 扫描线 + 离散 求矩阵大于k次面积并 )
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 1255 覆盖的面积(线段树:扫描线求面积并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题目大意:给你若干个矩形,让你求这些矩形重叠两次及以上的部分的面积. 解题思路:模板题,跟HDU ...
- HDU 1255 覆盖的面积 (线段树+扫描线+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...
随机推荐
- 由于 UNION ALL Chinese_PRC_CI_AS”之间的排序规则冲突,值的排序规则未经解析
由于不同的表之间的排序规则不一样,在归并集合的 时候会出现排序问题. 只要在查询的列后面 声明结果列的排序规则保持一致即可: SELECT b0.[CardCode] collate SQL_Lat ...
- to_char函数引发的不走索引
SQL> conn cowork_czsh/cowork_czsh Connected. SQL> set linesize 200 SQL> set pagesize 200 SQ ...
- mysql常用查询归纳
一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) .where常用运算符: 比较运算符 > ...
- Oracle查询死锁&杀死会话
select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s where ...
- PHP关于时区问题
最近在学习PHP过程中发现PHP中的格式化时间戳比北京时间晚了8个小时,上网搜索发现原来是时区不对,解决办法是: 1.永久修改 更改php.ini文件中的data.tim ...
- CSS多级数字序号的目录列表(类似3.3.1.这样的列表序号)
编写文档手册的时候,我们经常需要列表项前面的序号将上级各层的序号也附加在前面,如下图: (图一) 但默认的<ol>列表,任何层次都是单个序号开始.如下图: (图二) 要实现图一效果,方法 ...
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
- 解决 Google 重定向,体验 Google 本味
想要体验原汁原味的 Google(google.com),下面的方案是我用过的较方便的方案. 欢迎更正及补充 Chrome 扩展 Chrone 商店有一款禁止重定向的扩展 NoCountryRedir ...
- Hacker(20)----手动修复Windows系统漏洞
Win7系统中存在漏洞时,用户需要采用各种办法来修复系统中存在的漏洞,既可以使用Windows Update修复,也可使用360安全卫士来修复. 一.使用Windows Update修复系统漏洞 Wi ...
- correlated subquery and non-correlated subquery
子查询:嵌套在其他查询中的查询称之. 子查询又称内部,而包含子查询的语句称之外部查询(又称主查询). 所有的子查询可以分为两类,即相关子查询和非相关子查询 1>非相关子查询是独立于外部查询的子查 ...