codevs3044

题面

大意:给出n个矩形求覆盖的总面积

看了hzwer的blog 似懂非懂 链接

可能还要多练点吧qaq

#include <bits/stdc++.h>
using namespace std;
#define N 10005
int n,m;
struct node{double x1,x2,y; int op;}line[N];
inline bool cmp(node a,node b){return a.y < b.y;}
double hash[N];
struct SegmentTree{int l,r,co; double sum;}Tree[N<<];
inline void pushup(int x)
{
int l=Tree[x].l,r=Tree[x].r;
if(Tree[x].co>)Tree[x].sum=hash[r+]-hash[l];
else if(l==r) Tree[x].sum=;
else Tree[x].sum=Tree[x<<].sum+Tree[x<<|].sum;
}
inline void build(int l,int r,int x)
{
Tree[x].l=l; Tree[x].r=r; Tree[x].co=;
if(l==r){Tree[x].sum=;return;}
int mid=(l+r)>>; build(l,mid,x<<); build(mid+,r,x<<|); pushup(x);
}
inline void updata(int l,int r,int x,int val)
{
if(l<=Tree[x].l&&Tree[x].r<=r){ Tree[x].co+=val; pushup(x); return;}
int mid=(Tree[x].l+Tree[x].r)>>;
if(l<=mid) updata(l,r,x<<,val); if(r>mid) updata(l,r,x<<|,val); pushup(x);
}
int main()
{
while(~scanf("%d",&n))
{
int i; double x1,y1,x2,y2,ans=; if(n==) break;
for(i=;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
line[i*-].x1=line[i*].x1=x1;
line[i*-].x2=line[i*].x2=x2;
line[i*-].y=y1; line[i*-].op=-;
line[i*].y=y2; line[i*].op=;
hash[i*-]=x1; hash[i*]=x2;
}
n*=; sort(line+,line+n+,cmp); sort(hash+,hash+n+); m=unique(hash+,hash+n+)-hash-; build(,m,);
for(i=n;i>=;i--)
{
int l=lower_bound(hash+,hash+m+,line[i].x1)-hash,r=lower_bound(hash+,hash+m+,line[i].x2)-hash-;
updata(l,r,,line[i].op); ans+=(line[i].y-line[i-].y)*Tree[].sum;
}
printf("%.2lf\n",ans);
}
}

codevs3044的更多相关文章

  1. [codevs3044][POJ1151]矩形面积求并

    [codevs3044][POJ1151]矩形面积求并 试题描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n ...

  2. codevs3044 线段树+扫描线

    3044 矩形面积求并 http://hzwer.com/879.html 扫描线 // #pragma comment(linker, "/STACK:1024000000,1024000 ...

  3. [codevs3044]矩形面积求并

    题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...

  4. 2017年暑假ACM集训日志

    20170710: hdu1074,hdu1087,hdu1114,hdu1159,hdu1160,hdu1171,hdu1176,hdu1010,hdu1203 20170711: hdu1231, ...

随机推荐

  1. Unity热更新学习(一) —— AssetBundle 打包和加载

    理论不多说,网上,官方文档都有.  这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html 示例和注意点记录一下,用到时以便查阅. 一. ...

  2. JavaScript技巧总结和本地存储(二)

    离线检测 检测是否离线,html5为此定义了一个navigator.onLine属性,这个属性为true表示设备能上网,false表示离线,这个属性还有点兼容问题.因此单独使用这个属性不能确定网络是否 ...

  3. 来,看看MySQL 5.6, 5.7, 8.0的新特性

    对于MySQL的历史,相信很多人早已耳熟能详,这里就不要赘述.下面仅从产品特性的角度梳理其发展过程中的里程碑事件. 1995年,MySQL 1.0发布,仅供内部使用. 1996年,MySQL 3.11 ...

  4. 移动前端webApp开发点滴积累20140629

    #移动前端webApp开发点滴积累20140629 ##关于input行内居中的问题 给input设定一个比较高的高度,在某些版本的移动设备上,文字不能垂直居中,即使设定了相同的行高也不行.(见图) ...

  5. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简述及技术选型介绍

    作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载. 萌芽阶段 很久之前就开始打算整理一下自己的技术博客了,由于各种原因(借口 ...

  6. 9宫拼图小游戏(WPF MVVM实现)

    昨天逛论坛,看到一个哥们用WPF做了一个9宫的拼图游戏,发现初学WPF的人都很容易犯一个错误(我也犯过):把WPF当WINFORM用!所以想写一个比较符合WPF风格的版本,于是就抽工作的空余时间做了一 ...

  7. linus 下redis守护进程启动

    修改配置文件 sudo vim /usr/src/redis/redis.conf // 具体的安装目录不一样,以安装的时候为准 # 将daemonize 改为yes daemonize yes 重新 ...

  8. c++继承实例

    #include <iostream> #include <vector> #include <string> using namespace std; class ...

  9. amd,cmd规范

    AMD 和 CMD 的区别有哪些? AMD规范与CMD规范的区别 回顾:前端模块化和AMD.CMD规范(全) 浅析JS模块规范:AMD,CMD,CommonJS 理解AMD ,CMD,CommonJS ...

  10. 安装配置JDK和Eclipse的步骤

    导读 作为Java程序员,需要在Linux系统上安装Eclipse,很多人不知要如何安装,在安装Eclipse前,还需安装JDK,Linux下如何安装JDK和Eclipse呢?下面跟朋友们介绍下Lin ...