hdu-1255(线段树求面积并)模板
题目链接:传送门
思路:
(1)建立线段的信息,每个线段存储l到r的线段的x位置和y的起始点与终点。
建立线段树的节点信息,每个节点代表一个区间的信息,x表示区间的横坐标的位置,l,r表示纵坐标的范围,flag表示是否标记过,cover表示线段的覆盖次数。
(2)先将y的位置按照从小到大排序,再将边按照x的先后位置排序,然后建树,这样可以依次求出那部分被覆盖了。
(3)建树:如果不是叶子节点就标记为false,否则是true
(4)插入新区域:如果先不断递归找到合适区域,再求出这个区域的面积,和一般的线段树操作基本相同。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
struct Node{
double x,l,r;
int flag,cover;
}node[maxn<<];
struct LINE{
double x,y_up,y_down;
int flag;
}line[maxn];
double y[maxn];
bool cmp(LINE a,LINE b)
{
return a.x<b.x;
}
void build(int rt,int l,int r)
{
node[rt].l=y[l];
node[rt].r=y[r];
node[rt].flag=false;
node[rt].cover=;
node[rt].x=-;
if(l+==r) //表示一个叶子节点
{
node[rt].flag=true;
return ;
}
int mid=(l+r)>>;
build(rt<<,l,mid); //区间是连续的。
build(rt<<|,mid,r);
}
double Insert(int rt,double x,double l,double r,int flag)
{
if(l>=node[rt].r||r<=node[rt].l) return ;
if(node[rt].flag) //找到一个叶节点
{
if(node[rt].cover>) //覆盖次数大于1
{
double pre=node[rt].x;
double ans=(x-pre)*(node[rt].r-node[rt].l);
node[rt].x=x;
node[rt].cover+=flag;
return ans;
}
else
{
node[rt].x=x;
node[rt].cover+=flag;
return ;
}
}
double ans=;
ans+=Insert(rt<<,x,l,r,flag);
ans+=Insert(rt<<|,x,l,r,flag);
return ans;
}
int main(void)
{
int T,i,cnt,j,n;
double x1,y1,x2,y2;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(cnt=-,i=;i<n;i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
y[++cnt]=y1;
line[cnt].x=x1;
line[cnt].y_down=y1;
line[cnt].y_up=y2;
line[cnt].flag=;
y[++cnt]=y2;
line[cnt].x=x2;
line[cnt].y_down=y1;
line[cnt].y_up=y2;
line[cnt].flag=-;
}
sort(y,y+cnt+);
sort(line,line+cnt+,cmp);
build(,,cnt);
double ans=;
for(i=;i<=cnt;i++)
{
ans+=Insert(,line[i].x,line[i].y_down,line[i].y_up,line[i].flag);
}
printf("%.2lf\n",ans);
}
return ;
}
hdu-1255(线段树求面积并)模板的更多相关文章
- hdu 1542 线段树扫描(面积)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- hdu 1394 (线段树求逆序数)
<题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...
- HDU - 1255 覆盖的面积 (线段树求面积交)
https://cn.vjudge.net/problem/HDU-1255 题意 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 分析 求面积并的题:https://www.cnbl ...
- 覆盖的面积(HDU 1255 线段树)
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem D ...
- hdu 1255(线段树 扫描线) 覆盖的面积
http://acm.hdu.edu.cn/showproblem.php?pid=1255 典型线段树辅助扫描线,顾名思义扫描线就是相当于yy出一条直线从左到右(也可以从上到下)扫描过去,此时先将所 ...
- 覆盖的面积 HDU - 1255(扫描线求面积交)
题意: 就是扫描线求面积交 解析: 参考求面积并.... 就是把down的判断条件改了一下..由w > 0 改为 w > 1 同时要讨论一下 == 1 时 的情况, 所以就要用到一个临时 ...
- HDU 1394 线段树求逆序对
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- 覆盖的面积 HDU - 1255 线段树+扫描线+离散化 求特定交叉面积
#include<cstdio> #include<map> #include<algorithm> using namespace std; ; struct N ...
- HDU - 1542 Atlantis(线段树求面积并)
https://cn.vjudge.net/problem/HDU-1542 题意 求矩形的面积并 分析 点为浮点数,需要离散化处理. 给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1).(x ...
随机推荐
- 转Genymetion
http://www.cnblogs.com/rainboy2010/p/6387770.html 介绍 Genymotion是一款出色的跨平台的Android模拟器,具有容易安装和使用.运行速度快的 ...
- QT信号与槽
参考: 简单例子: http://www.cnblogs.com/MuyouSome/p/3515941.html 基本了解: http://blog.csdn.net/harbinzju/artic ...
- FortiGate基本信息
1.介绍 FortiGate是全新的下一代防火墙,在整个硬件架构和系统上面都有新的设计,在性能和功能上面都有了很大提升,具有性能高.接口丰富.功能齐全.安全路由交换一体化.性价比高等优势. Forti ...
- 8.16 val()和html()的问题
今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...
- IIS挂起网站配置文件地址
“C/用户/Administrator/我的文档/IISExpress/Config/applicationhost”
- utils.js和vue-loader.conf.js
var utils = require('./utils')var config = require('../config')var isProduction = process.env.NODE_E ...
- datepicker动态初始化
datepicker 初始化动态表单的input,需要调用jquery的on方法来给未来元素初始化. //对动态添加的时间文本框进行动态初始化 $('table').on("focus&qu ...
- JAVA动手动脑及课后作业
1.查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 运行结果 true true false 原因 1)在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0, ...
- hdu 5459(2015沈阳网赛) Jesus Is Here
题目;http://acm.hdu.edu.cn/showproblem.php?pid=5459 题意 给出一组字符串,每个字符串都是前两个字符串相加而成,求第n个字符串的c的各个坐标的差的和,结果 ...
- 如何选择稳定的PHP虚拟主机?
先评估自己的业务量有多大如果是新站且流量和数据量都不大的话,建议刚开始先购买低配的即可,待流量逐渐增大时在逐渐升级,灵活又省钱 带宽的限制 虚拟主机带宽是指同一时间内所能承载的数据的能力,直接关系大虚 ...