HDU-1542 Atlantis(离散化+扫描线)
题目大意:给n个矩形,可能重叠,求面积。
题目分析:线段树维护扫描线。
代码如下:
# include<bits/stdc++.h>
using namespace std;
# define LL long long
# define mid (l+(r-l)/2) const int N=100000; struct Segment
{
double x1,x2,y;
bool buttom;
};
Segment seg[(N<<1)+5];
struct Node
{
double m; ///被覆盖的长度
int c; ///被完全覆盖的次数
};
Node tr[N*4+5];
double x[N*2+5];
map<double,int>mp; bool comp(const Segment &s1,const Segment &s2)
{
return s1.y<s2.y;
} void build(int rt,int l,int r)
{
tr[rt].m=0.0;
tr[rt].c=0;
if(l==r) return ;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
} void updateHere(int rt,int l,int r)
{
if(tr[rt].c>0)
tr[rt].m=x[r]-x[l-1];
else if(l==r)
tr[rt].m=0;
else tr[rt].m=tr[rt<<1].m+tr[rt<<1|1].m;
} void update(int rt,int l,int r,int L,int R,int val)
{
if(L<=l&&r<=R){
tr[rt].c+=val;
updateHere(rt,l,r);
}else{
if(L<=mid) update(rt<<1,l,mid,L,R,val);
if(R>mid) update(rt<<1|1,mid+1,r,L,R,val);
updateHere(rt,l,r);
}
} int main()
{
int n;
int cas=0;
while(~scanf("%d",&n)&&n)
{
double x1,y1,x2,y2;
for(int i=0;i<n;++i){
cin>>x1>>y1>>x2>>y2;
seg[i<<1].x1=x1,seg[i<<1].x2=x2;
seg[i<<1].y=y1;
seg[i<<1].buttom=true;
seg[i<<1|1].x1=x1,seg[i<<1|1].x2=x2;
seg[i<<1|1].y=y2;
seg[i<<1|1].buttom=false;
x[i<<1]=x1;
x[i<<1|1]=x2;
}
n<<=1;
sort(seg,seg+n,comp);
sort(x,x+n);
int len=unique(x,x+n)-x;
for(int i=0;i<len;++i)
mp[x[i]]=i;
build(1,1,len-1);
seg[2*n].y=seg[2*n-1].y;
double ans=0;
for(int i=0;i<n;++i){
int l=mp[seg[i].x1];
int r=mp[seg[i].x2];
if(seg[i].buttom)
update(1,1,len-1,l+1,r,1);
else update(1,1,len-1,l+1,r,-1);
ans+=tr[1].m*(seg[i+1].y-seg[i].y);
}
printf("Test case #%d\n",++cas);
printf("Total explored area: %.2lf\n\n",ans);
}
return 0;
}
HDU-1542 Atlantis(离散化+扫描线)的更多相关文章
- (中等) HDU 1542 Atlantis,扫描线。
Problem Description There are several ancient Greek texts that contain descriptions of the fabled is ...
- HDU 1542 Atlantis(扫描线)题解
题意:给n个可能相交的矩形,问你不重复的总面积 思路:扫描线,一边扫一边加. 扫描线:图片来源:理解扫描线 假设我们要算以下四个矩形面积,显然中间深色的是重复的.我们按照x的大小,从左往右扫,然后用线 ...
- (HDU 1542) Atlantis 矩形面积并——扫描线
n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...
- HDU 1542 Atlantis(矩形面积并)
HDU 1542 Atlantis 题目链接 题意:给定一些矩形,求面积并 思路:利用扫描线,因为这题矩形个数不多,直接暴力扫就能够了.假设数据大.就要用线段树 代码: #include <cs ...
- HDU 1542 Atlantis(线段树扫描线+离散化求面积的并)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU 1542 Atlantis (线段树 + 扫描线 + 离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- HDU 1542 - Atlantis - [线段树+扫描线]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- hdu 1542 Atlantis(线段树,扫描线)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- POJ 1151 HDU 1542 Atlantis(扫描线)
题目大意就是:去一个地方探险,然后给你一些地图描写叙述这个地方,每一个描写叙述是一个矩形的右下角和左上角.地图有些地方是重叠的.所以让你求出被描写叙述的地方的总面积. 扫描线的第一道题,想了又想,啸爷 ...
- HDU 1542 线段树+扫描线+离散化
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
随机推荐
- Linux Lab
ssh vi /etc/apt/sources.list su ssh username@ipaddress eg : ssh root@172.16.247.143 实验一 fdisk /dev/s ...
- 虚拟机安装Centos版本的linux
选择自定义安装,然后一路确定下去,对了,Centos的版本一定要高,比如centos 6,太低安装会出问题
- 教学目标的表述方式──行为目标的ABCD表述法
教学目标应规定学生在教学活动结束后能表现出什么样的学业行为,并限定学生学习过程中知识.技能的获得和情感态度发展的层次.范围.方式及变化效果的量度.对每节课教学目标的准确表述,可以充分发挥教学目标在教学 ...
- Twitter CEO:有望进军中国 不会改变原则
新浪科技讯 8月12日下午消息,据台湾“中央社”报道,Twitter CEO科斯特洛(Dick Costolo)日前接受<日经新闻>专访时指出,Twitter有望进军中国大陆,科斯特洛表示 ...
- joinfetch之意义
既然被join的对象早晚都要用到,为什么要先从A表取这边的独享,再根据关联关系取B表中的对象,分两次或者多次进行,增加数据库的负载呢? 为什么不把A表和B表join成一张表,从这个组合表中把要取的对象 ...
- jQuery 动态添加瀑布流
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 首席技术官 (CTO) 比普通程序员强在哪
互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己 ...
- 2016 - 1 - 21 RunloopMode中的Source 与Observer
一:CFRunLoopSourceRef 1.CFRunLoopSourceRef是事件源(输入源) 2.按照官网文档分为,Source可以分为以下几类: 2.1 Porl - Based Sourc ...
- (spring-第16回【AOP基础篇】)基本概念
AOP(Aspect Oriented Programing),面向切面方程.介绍具体定义前,先看一个例子: package com.baobaotao.concept; public class F ...
- GPRS Sniffing Tutorial
- Download sources into ~/gprs_sniffer git clone git://git.osmocom.org/osmocom-bb.git git clone git: ...