codves 3044 矩形面积求并
codves 3044 矩形面积求并
输入n个矩形,求他们总共占地面积(也就是求一下面积的并)
可能有多组数据,读到n=0为止(不超过15组)
每组数据第一行一个数n,表示矩形个数(n<=100)
接下来n行每行4个实数x1,y1,x2,y1(0 <= x1 < x2 <= 100000;0 <= y1 < y2 <= 100000),表示矩形的左下角坐标和右上角坐标
每组数据输出一行表示答案
2
10 10 20 20
15 15 25 25.5
0
180.00
线段树+扫描线
本题解析参照黄学长博客http://www.hzwer.com/879.html
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,opl,opr,flag;
int col[];
double hash[],sum[],ans;
struct node
{
double x1,x2,h;
int f;
}e[];
bool cmp(node a,node b) {return a.h<b.h;}
inline void up(int k,int l,int r)
{
if(col[k]) sum[k]=hash[r+]-hash[l];
else sum[k]=sum[k<<]+sum[(k<<)+];
}
inline void change(int k,int l,int r)
{
if(l>=opl&&r<=opr)
{
col[k]+=flag;
up(k,l,r);
return;
}
int m=l+r>>;
if(opl<=m) change(k<<,l,m);
if(opr>m) change((k<<)+,m+,r);
up(k,l,r);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(!n) return ;
double x1,y1,x2,y2;
for(int i=;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
e[i*-].x1=e[i*].x1=x1;
e[i*-].x2=e[i*].x2=x2;
e[i*-].h=y1;e[i*].h=y2;
hash[i*-]=x1;hash[i*]=x2;
e[i*-].f=;e[i*].f=-;
}
sort(hash+,hash+*n+);
sort(e+,e+*n+,cmp);
ans=;
for(int i=;i<=*n;i++)
{
opl=lower_bound(hash+,hash+*n+,e[i].x1)-hash;
opr=lower_bound(hash+,hash+*n+,e[i].x2)-hash-;
flag=e[i].f;
change(,,*n);
ans+=sum[]*(e[i+].h-e[i].h);
}
printf("%.2lf\n",ans);
}
}
codves 3044 矩形面积求并的更多相关文章
- codevs 3044 矩形面积求并
3044 矩形面积求并 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不 ...
- 3044 矩形面积求并 - Wikioi
题目描述 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~ 去掉了打标记的过程 同时更新区间的时候先 ...
- codevs 3044 矩形面积求并 || hdu 1542
这个线段树的作用其实是维护一组(1维 平面(?) 上的)线段覆盖的区域的总长度,支持加入/删除一条线段. 线段树只能维护整数下标,因此要离散化. 也可以理解为将每一条处理的线段分解为一些小线段,要求每 ...
- 【题解】codevs 3044 矩形面积合并
传送门 3044 矩形面积求并 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下 ...
- [Codevs] 矩形面积求并
http://codevs.cn/problem/3044/ 线段树扫描线矩形面积求并 基本思路就是将每个矩形的长(平行于x轴的边)投影到线段树上 下边+1,上边-1: 然后根据线段树的权值和与相邻两 ...
- [codevs3044][POJ1151]矩形面积求并
[codevs3044][POJ1151]矩形面积求并 试题描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n ...
- 矩形面积求并(codevs 3044)
题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...
随机推荐
- Context.Response.End(); VS HttpContext.Current.ApplicationInstance.CompleteRequest();
今天遇到一個問題,頁面Client端send一個ajax請求,然後在server端返回一個json的字符串 $.ajax({ url: "xxxxx.aspx", type: &q ...
- Dapper一个和petapoco差不多的轻量级ORM框架
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...
- FJUT2017寒假训练二题解
A题 题意:让你找出唯一的一个四位数,满足对话时的要求. 思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not s ...
- 基于Avocado 的 QData MySQL自动化测试.md
qdata-mysql 自动化测试概要设计 │ ├── 1. 依赖环境 │ │ ├ │ │ └───── │ ├── 2. 配置文件 │ │ ├ │ │ └── ...
- EXCEL VLOOKUP函数怎么返回多列结果
一般VLOOKUP函数只能返回一列的结果,本例介绍如何一次性返回多列结果. 工具/原料 Excel 函数使用方法说明: 首先,原始数据包括姓名.工号.性别和籍贯信息.现在需要根据姓名同 ...
- web SPA项目目录、命名规范
项目结构:├── build ├── docs ├── package.json ├── src │ ├── components │ │ ├── List │ │ │ ├── index.js │ ...
- 【重要】ionic和Angular的安装步骤
首先搭建好npm和node环境的最新版本安装:: 一:开始安装ionic: 1. npm install -g ionic(全局安装ionic) 2. ionic start 新建的项目名称 +模板样 ...
- C语言第四次博客作业--嵌套循环
一.PTA实验作业 题目1:编程打印空心字符菱形 1. 本题PTA提交列表 2. 设计思路(流程图) 3.本题调试过程碰到问题及解决办法 思考过程:将问题拆解为菱形问题和字母变化问题两部分 1> ...
- [JLOI2012] 树
Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...
- 搭建nuxtjs程序 —— 用户信息 or token怎么不丢失
框架背景:开发框架采用vue,需要更好的SEO,更快的内容到达时间,从浏览器看不到对服务器的请求接口,选用开箱即用的nuxtjs. 问题背景:1. 前后分离,需前端存储token及登录后的用户信息: ...