[codevs3044]矩形面积求并
题目描述 Description
|
输入n个矩形,求他们总共占地面积(也就是求一下面积的并)
|
输入描述 Input Description
|
可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n,表示矩形个数(n<=100) 接下来n行每行4个实数x1,y1,x2,y1(0 <= x1 < x2 <= 100000;0 <= y1 < y2 <= 100000),表示矩形的左下角坐标和右上角坐标 |
输出描述 Output Description
|
每组数据输出一行表示答案
|
样例输入 Sample Input
|
2
10 10 20 20 15 15 25 25.5 0 |
样例输出 Sample Output
|
180.00
|
数据范围及提示 Data Size & Hint
|
无
|
矩形面积并,扫描线+线段树
本题的线段树比较奇怪
其中的坑点在pushup,线段树维护的区间[l,r]如果l,r相等并不是一段空集,而是线段pos[l]-pos[r+1] 这一线段
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define mem(a,b) memset(a,b,sizeof(a))
inline int read()
{
int x=,f=;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-;c=getchar();}
while(isdigit(c)){x=x*+c-'';c=getchar();}
return x*f;
}
const int maxn=;
int n,add[maxn<<];
double a,b,c,d,pos[maxn],sum[maxn<<],ans;
struct segment
{
double X,x,Y;int tag;
segment(){}
segment(double _1,double _2,double _3,int _4):X(_1),x(_2),Y(_3),tag(_4) {}
bool operator < (const segment &s)const {return Y<s.Y;}
}seg[maxn];
void pushup(int l,int r,int o)
{
if(add[o])sum[o]=pos[r+]-pos[l];
else if(l==r)sum[o]=;
else sum[o]=sum[o<<]+sum[o<<|];
}
void update(int l,int r,int o,int L,int R,int c)
{
if(L==l && r==R)
{
add[o]+=c;
pushup(l,r,o);
return;
}
int mid=(l+r)>>,lo=o<<,ro=lo|;
if(R<=mid)update(l,mid,lo,L,R,c);
else if(L>mid)update(mid+,r,ro,L,R,c);
else update(l,mid,lo,L,mid,c),update(mid+,r,ro,mid+,R,c);
pushup(l,r,o);
}
int main()
{
while(scanf("%d",&n)!=EOF && n)
{
mem(pos,);mem(sum,);mem(add,);ans=;
for(int i=;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
seg[i*]=segment(a,c,b,);pos[i*]=a;
seg[i*-]=segment(a,c,d,-);pos[i*-]=c;
}
sort(seg+,seg+n*+);sort(pos+,pos+n*+);
for(int i=;i<=*n;i++)
{
int l=lower_bound(pos+,pos+n*+,seg[i].X)-pos;
int r=lower_bound(pos+,pos+n*+,seg[i].x)-pos-;
update(,*n,,l,r,seg[i].tag);
ans+=sum[]*(seg[i+].Y-seg[i].Y);
}
printf("%.2lf\n",ans);
}
return ;
}
[codevs3044]矩形面积求并的更多相关文章
- [codevs3044][POJ1151]矩形面积求并
[codevs3044][POJ1151]矩形面积求并 试题描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n ...
- codves 3044 矩形面积求并
codves 3044 矩形面积求并 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Desc ...
- codevs 3044 矩形面积求并
3044 矩形面积求并 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不 ...
- [Codevs] 矩形面积求并
http://codevs.cn/problem/3044/ 线段树扫描线矩形面积求并 基本思路就是将每个矩形的长(平行于x轴的边)投影到线段树上 下边+1,上边-1: 然后根据线段树的权值和与相邻两 ...
- 3044 矩形面积求并 - Wikioi
题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...
- POJ 1151 Atlantis 矩形面积求交/线段树扫描线
Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...
- 矩形面积求并(codevs 3044)
题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...
- poj1151==codevs 3044 矩形面积求并
Atlantis Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21511 Accepted: 8110 Descrip ...
- codevs 3044 矩形面积求并 (扫描线)
/* 之前一直偷懒离散化+暴力做着题 今天搞一下扫描线 自己按照线段树的一般写法写的有些问题 因为不用于以前的区间sum so 题解搬运者23333 Orz~ 去掉了打标记的过程 同时更新区间的时候先 ...
随机推荐
- docker环境下数据库的备份(postgresql, mysql)
posgresql 备份/恢复 mysql 备份/恢复 补充 posgresql 备份/恢复 备份 DATE=`date +%Y%m%d-%H%M` BACK_DATA=xxapp-data-${DA ...
- 【RS】Deep Learning based Recommender System: A Survey and New Perspectives - 基于深度学习的推荐系统:调查与新视角
[论文标题]Deep Learning based Recommender System: A Survey and New Perspectives ( ACM Computing Surveys ...
- Docker安装和上传容器
安装Docker Requirements for Mac(硬件要求): Mac的硬件必须是2010或者更新的,需要支持memory management unit(MMU) virtualizait ...
- Distributed and Parallel Computing
Omega Network Model
- Oracle性能调优之物化视图用法简介
目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...
- ng 使用阿里巴巴矢量图
1.进入阿里巴巴矢量图标库中,选择需要下载的图标,添加进项目中 2.进去项目选择Font class 模式,然后下载到本地 3.解压下载的压缩包,把.css/.svg/.ttf/.woff/.woff ...
- WPF ResourceDictionary XAML资源 c#代码 获取与遍历
使用C#代码来获取XAML资源,除去正常的FindResource.而且是能查询到资源的对象. 说实话还是很麻烦的. 比如说我现在有一堆静态资源放在xaml的资源中,我想通过绑定的方式来获取. 好比是 ...
- Java面试-TCP连接及其优化
作为一个后端程序员,网络连接这块是一个绕不过的砍,当你在做服务器优化的时候,网络优化也是其中一环,那么作为网络连接中最基础的部分-TCP连接你了解吗?今天我们来仔细看看这个部分. TCP建立连接-三次 ...
- spring好文章整理
彻底搞明白Spring中的自动装配和Autowired IDEA编译spring 5源码 Spring源码——IDEA读Spring源码环境搭建 导入spring源码org.springframewo ...
- c# 类实例序列化反序列化json文件 (原发布 csdn 2017-10-01 20:02:12)
前言 前段时间使用了net.json保存对象数据.添加完成后,测试发现300多实例数据保存加载json文件,速度比原方式(BinaryFormatter)慢.但是功能加上后也懒再删掉代码了,索性就采用 ...