hdu 1542 线段树 求矩形并
Atlantis
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5932 Accepted Submission(s): 2599
The input file is terminated by a line containing a single 0. Don’t process it.
Output a blank line after each test case.
Total explored area: 180.00
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
typedef struct node
{
double x,y1,y2;
int flag;
} node;
typedef struct tree
{
double y1,y2,x;
double cover;
bool flag;
} treee;
node n[];
treee tree[];
double q[];
bool cmp(node a,node b)
{
return a.x<b.x;
}
void build(int l,int r,int t)
{
tree[t].cover=;
tree[t].flag=false;
tree[t].x=-;
tree[t].y1=q[l];
tree[t].y2=q[r];
if(l+==r)
{
tree[t].flag=true;
return ;
}
int m=(l+r)>>;
build(l,m,t<<);
build(m,r,t<<|);
}
double insert(double x,double y1,double y2,int t,int cover)
{
if(tree[t].y1>=y2||tree[t].y2<=y1)
{
return ;
}
if(tree[t].flag)
{
if(tree[t].cover>)
{
double sum=,x1=tree[t].x;
sum=(x-x1)*(tree[t].y2-tree[t].y1);
tree[t].cover+=cover;
tree[t].x=x;
return sum;
}
else
{
tree[t].cover+=cover;
tree[t].x=x;
return ;
}
}
return insert(x,y1,y2,t<<,cover)+insert(x,y1,y2,t<<|,cover);
}
int main()
{
double x,y,xx,yy;
int m,t,i,ww=;
while(~scanf("%d",&m)&&m)
{
t=;
for(i=; i<m; i++)
{
scanf("%lf%lf%lf%lf",&x,&y,&xx,&yy);
q[t]=y;
n[t].flag=;
n[t].x=x;
n[t].y1=y;
n[t++].y2=yy;
q[t]=yy;
n[t].flag=-;
n[t].x=xx;
n[t].y1=y;
n[t++].y2=yy;
}
sort(n+,n+t,cmp);
sort(q+,q+t);
build(,t-,);
double sum=;
for(i=; i<t; i++)
{
sum+=insert(n[i].x,n[i].y1,n[i].y2,,n[i].flag);
}
cout<<"Test case #"<<ww++<<endl;
cout<<"Total explored area: ";
printf("%.2lf\n\n",sum);
}
}
hdu 1542 线段树 求矩形并的更多相关文章
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
- hdu 1542 线段树扫描(面积)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- UVA 11983 Weird Advertisement --线段树求矩形问题
题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...
- 【hdu1542】线段树求矩形面积并
分割线内容转载自http://hzwer.com/879.html ------------------------------------------------------------------ ...
- POJ 1151 Atlantis 线段树求矩形面积并 方法详解
第一次做线段树扫描法的题,网搜各种讲解,发现大多数都讲得太过简洁,不是太容易理解.所以自己打算写一个详细的.看完必会o(∩_∩)o 顾名思义,扫描法就是用一根想象中的线扫过所有矩形,在写代码的过程中, ...
- hdu 1394 (线段树求逆序数)
<题目链接> 题意描述: 给你一个有0--n-1数字组成的序列,然后进行这样的操作,每次将最前面一个元素放到最后面去会得到一个序列,那么这样就形成了n个序列,那么每个序列都有一个逆序数,找 ...
- POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
题意:给出矩形两对角点坐标,求矩形面积并. 解法:线段树+离散化. 每加入一个矩形,将两个y值加入yy数组以待离散化,将左边界cover值置为1,右边界置为2,离散后建立的线段树其实是以y值建的树,线 ...
- HDU 1828 / POJ 1177 Picture --线段树求矩形周长并
题意:给n个矩形,求矩形周长并 解法:跟求矩形面积并差不多,不过线段树节点记录的为: len: 此区间线段长度 cover: 此区间是否被整个覆盖 lmark,rmark: 此区间左右端点是否被覆盖 ...
- UVA 11983 Weird Advertisement(线段树求矩形并的面积)
UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...
随机推荐
- django全文检索
-------------------linux下配置操作1.在虚拟环境中依次安装包 1.pip install django-haystack haystack:django的一个包,可以方便地对m ...
- 【搬运工】之——Selenium+IDEA+Maven+TestNG环境搭建(转)
Selenium+IDEA+Maven+TestNG环境搭建 第一 安装java环境. 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/ ...
- python程序之profile分析
操作系统 : CentOS7.3.1611_x64 python版本:2.7.5 问题描述 1.Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢: 2.Python开发的程序在使用过程 ...
- Tomcat利用Redis存储Session
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt269 如果英文不错的看,建议直接看官网吧,官网写的挺清楚.下面的内容是转载的 ...
- 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt388 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与 ...
- (八)、vpn-pptp部署
中小型规模网站集群架构:VPN-PPTP : 矮哥linux运维群:93324526 前言: 你想管理机器吗? 你想更安全吗? 请安装VPN吧 部署 1.查看系统是否支持PPP [root@oldbo ...
- 必应app测试
一.app评测 1.个人使用体验 第一次使用必应app看到是微软这么一个大公司做的英语词典,应该会很有名但是我居然没有听说过.当我打开这个软件使用的时候看到界面的视频感觉还不错.但是总感觉这样的app ...
- Java计算器1.0版
此版本只是设计了页面,还没有实现事件监听 代码: package com.niit.javagui; import java.awt.Button; import java.awt.FlowLay ...
- Swing-JList选择事件监听器ListSelectionListener-入门
当JList中的元素被选中时,选择事件将被触发.对于JTable也是一样,你可以把它看做是多个并列的JList.那么,如果程序需要对该事件做出响应,需要以下步骤: (1)创建一个实现了 ListSel ...
- 201521123001《Java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 参考资料: XMind 答: 大多数情况下,从性能上来说ArrayList最好,但是当集合内的元素需要频繁插入.删除时Lin ...