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. 基于webpack+react+antd 项目构建

    工欲善其事必先利其器,学习React也是如此. 下面分享一篇基于webpack+react+antd 项目构建的好文章, https://blog.hduzplus.xyz/articles/2017 ...

  2. Apache Spark 2.2.0新特性介绍(转载)

    这个版本是 Structured Streaming 的一个重要里程碑,因为其终于可以正式在生产环境中使用,实验标签(experimental tag)已经被移除.在流系统中支持对任意状态进行操作:A ...

  3. 朱晔和你聊Spring系列S1E7:简单好用的Spring Boot Actuator

    阅读PDF版本 本文会来看一下Spring Boot Actuator提供给我们的监控端点Endpoint.健康检查Health和打点指标Metrics等所谓的Production-ready(生产环 ...

  4. wtf_1234

    好无聊啊,今天困的厉害. 不想做任何事情 wtf bitch!

  5. python 跨域处理方式

    因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送ht ...

  6. windows安装Redis和客户端

    一.Windows安装Redis 1.下载安装包Redis-x64-3.0.504.zip到本地 2.解压 3.打开CMD,切换到解压后的redis目录,然后 C:\Users\Administrat ...

  7. SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)

    我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...

  8. 网络编程-C/S架构

    什么是C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),本章的重点就是教大家写一个C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 计算机基础知识 作为应用 ...

  9. 小程序wxRequest封装

    //const host = 'http://114.215.00.00:8005';// 测试地址 const host = 'https://xx.xxxxxxxx.net'; // 正式地址 c ...

  10. [2017BUAA软工助教]第0次作业小结

    BUAA软工第0次作业小结 零.题目 作业链接: This is a hyperlink 一.评分规则 本次作业满分10分: 按时提交有分 一周内补交得0分 超过一周不交或抄袭倒扣全部分数 评分规则如 ...