n个矩形 问他们覆盖的面积重复的就算一次

x数组存线段  然后根据横坐标排一下

z 线段树 l - r   就是1 ~ 2*n

#include<stdio.h>
#include<algorithm>
#include<string.h> using namespace std; #define MAXN 110
struct line
{
double x,y1,y2;
int flag;
}x[MAXN];
double y[MAXN<<]; struct node
{
int l,r,cov;
double x,y_up,y_down; }z[*MAXN]; bool cmp(line a,line b)
{
return a.x<b.x;
}
void Build(int l,int r,int a)
{
z[a].l=l;
z[a].r=r;
z[a].cov=;
z[a].x=-;
z[a].y_down=y[l];
z[a].y_up=y[r]; if(l+==r)//叶子节点
return ;
int mid=(l+r)>>;
Build(l,mid,a<<);
Build(mid,r,a<<|);//这边是mid
}
double Insert(int l,int r,int ind,int a)
{
if(x[ind].y1>=z[a].y_up||x[ind].y2<=z[a].y_down) //在外面
return ; if(l+==r)//叶子节点
{
if(z[a].cov>)
{
double sum=(x[ind].x-z[a].x)*(z[a].y_up-z[a].y_down);
z[a].x=x[ind].x; //这边要更新x
z[a].cov+=x[ind].flag;
return sum;
}
else
{
z[a].x=x[ind].x;
z[a].cov+=x[ind].flag;
return ;
}
}
double ans1,ans2;
int mid=(l+r)>>;
ans1=Insert(l,mid,ind,a<<);
ans2=Insert(mid,r,ind,a<<|);//这边是mid
return ans1+ans2; }
int main()
{
int n,ca=; while(scanf("%d",&n)!=EOF&&n)
{
int cnt=; for(int i=;i<=n;i++)
{
double x1,y1,x2,y2;
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
x[cnt].x=x1;
x[cnt].y1=y1;
x[cnt].y2=y2;
x[cnt].flag=;
y[cnt]=y1;
cnt++; x[cnt].x=x2;
x[cnt].y1=y1;
x[cnt].y2=y2;
x[cnt].flag=-;
y[cnt]=y2;
cnt++;
}
sort(y+,y+cnt);
sort(x+,x+cnt,cmp);
Build(,cnt-,);
double ans=;
for(int i=;i<cnt;i++)
{
ans+=Insert(,cnt-,i,);
}
printf("Test case #%d\n",ca++);
printf("Total explored area: %.2lf\n\n",ans);
}
return ;
}

线段树扫描线 HDU 1542的更多相关文章

  1. HDU 1542 - Atlantis - [线段树+扫描线]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  2. 线段树 扫描线 L - Atlantis HDU - 1542 M - City Horizon POJ - 3277 N - Paint the Wall HDU - 1543

    学习博客推荐——线段树+扫描线(有关扫描线的理解) 我觉得要注意的几点 1 我的模板线段树的叶子节点存的都是 x[L]~x[L+1] 2 如果没有必要这个lazy 标志是可以不下传的 也就省了一个pu ...

  3. 线段树扫描线(一、Atlantis HDU - 1542(覆盖面积) 二、覆盖的面积 HDU - 1255(重叠两次的面积))

    扫描线求周长: hdu1828 Picture(线段树+扫描线+矩形周长) 参考链接:https://blog.csdn.net/konghhhhh/java/article/details/7823 ...

  4. HDU 1828“Picture”(线段树+扫描线求矩形周长并)

    传送门 •参考资料 [1]:算法总结:[线段树+扫描线]&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828) •题意 给你 n 个矩形,求矩形并的周长: •题解1(两次扫描线) 周 ...

  5. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. hdu 1828 线段树扫描线(周长)

    Picture Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  8. HDU 4419 Colourful Rectangle --离散化+线段树扫描线

    题意: 有三种颜色的矩形n个,不同颜色的矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积. 解法: 很容易想到线段树扫描线求矩形面积并,但是如何 ...

  9. hdu 5091(线段树+扫描线)

    上海邀请赛的一道题目,看比赛时很多队伍水过去了,当时还想了好久却没有发现这题有什么水题的性质,原来是道成题. 最近学习了下线段树扫描线才发现确实是挺水的一道题. hdu5091 #include &l ...

随机推荐

  1. Chapter 2 Open Book——13

    "People in this town," he muttered. "Dr. Cullen is a brilliant surgeon who could prob ...

  2. Eclipse中配置weka,以及添加算法

    Eclipse中配置weka 1 找到weka的安装位置,寻找weka的压缩文件weka-src.jar,将压缩文件解压,解压出的文件夹weka-src. 2 打开Eclipse,新建Java pro ...

  3. 如何使用 AngularJS 的 ngShow 和 ngHide

    今天我们来看看怎样使用Angular的ngShow 和ngHide 指令来完成它们听起来应该完成的,显示和隐藏! 它们应该做的事 ngShow 和ngHide 允许我们显示或隐藏不同的元素.这有助于创 ...

  4. jquery新窗口打开链接

    第一种:下面的代码是针对m35ui这个样式下的a都是在新窗口打开    <script type="text/javascript">  jQuery(document ...

  5. php 控制循环

    控制结构语法 endif.endswitch.endwhile.endfor.endforeach

  6. SQL 查询时间段内的时间

    declare @dt1 as datetime declare @dt2 as datetime set @dt1 = '2008-01-01' set @dt2 = '2009-01-01' ;w ...

  7. Git 版本管理基本操作

    Git是一个版本管理操作的工具 非常N,可以很智能的分布式管理, 本网站学习笔记 来自于廖雪峰老师的内容借鉴 安装 yum -y install git 本地设置全局 告知是谁提交代码 信息 # gi ...

  8. (UE4) 动态加载DLL

    目前还没有实现,实在搞不懂为什么,大概代码如下: //------------------------------------------------------------------------- ...

  9. 【转】curl 查看一个web站点的响应时间(rt)

    原文: http://blog.csdn.net/caoshuming_500/article/details/14044697 1. curl 查看web站点rt curl -o /dev/null ...

  10. 【转】ethtool 命令详解

    命令描述: ethtool 是用于查询及设置网卡参数的命令. 使用概要:ethtool ethx       //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0.eth1等等etht ...