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——17

    The rain stayed soft over the weekend, quiet, so I was able to sleep well. 这周末雨一直下的很柔很安静,所以我能睡的很好. P ...

  2. Office Web Apps 错误

    owa安装完后,在sharepoint网站上打开word,excel,报错,Sorry, something went wrong, 通过correlation id找到错误信息(如何在sharepo ...

  3. SUPERVISOR进程管理器配置指南

    SUPERVISOR进程管理器配置指南1. supervisor简介1.1. 官网http://supervisord.org/ 1.2. 介绍Supervisor是一个进程控制系统. 它是一个C/S ...

  4. login/logout切换

    1. 前端按钮 <img border="0" width="18" height="18" src="<%=base ...

  5. Thinkphp中使用Redis

    先确保安装了redis扩展 添加Redis配置 'REDIS_HOST'=>'192.168.0.2', 'REDIS_PORT'=>6379, 其他配置根据自己ThinkPHP版本,找到 ...

  6. three dot

    http://stackoverflow.com/questions/28031603/what-do-three-dots-mean-in-go-command-line-invocations

  7. 不同版本(2.3,2.4,2.5) web.xml 的web-app头信息

    原址:点击打开链接 Servlet 2.3 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE w ...

  8. 【转】How to build and install PHP 5.6.9 from source on Ubuntu 14.04 VPS

    原文 https://vpsineu.com/blog/how-to-build-and-install-php-5-6-9-from-source-on-ubuntu-14-04-vps/ In t ...

  9. java transient修饰符

    1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问. 2)transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被trans ...

  10. Spring Boot 系列教程8-EasyUI-edatagrid扩展

    edatagrid扩展组件 edatagrid组件是datagrid的扩展组件,增加了统一处理CRUD的功能,可以用在数据比较简单的页面. 使用的时候需要额外引入jquery.edatagrid.js ...