POJ 1151 线段树+扫描线(计算矩形面积并)
前一篇博客有了讲解就不再叙述了
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<iostream>
- #include<cstdlib>
- #include<algorithm>
- #define mem(a,b) memset(a,b,sizeof(a))
- #define inf 0x3f3f3f3f
- #define N 220
- #define ll long long
- using namespace std;
- #define lson l,m,rt<<1
- #define rson m+1,r,rt<<1|1
- struct Seg
- {
- double l,r,h;
- int f;
- Seg() {}
- Seg(double a,double b,double c,int d):l(a),r(b),h(c),f(d) {}
- bool operator < (const Seg &cmp) const
- {
- return h<cmp.h;
- }
- } e[N];
- struct node
- {
- int cnt;
- double len;
- } t[N<<];
- double X[N];
- void pushdown(int l,int r,int rt)
- {
- if(t[rt].cnt)//当前的边被标记,就把当前的长度加上
- t[rt].len=X[r+]-X[l];
- else if(l==r)//当为一个点的时候长度为0
- t[rt].len=;
- else//其他情况把左右两个区间的值加上
- t[rt].len=t[rt<<].len+t[rt<<|].len;
- }
- void update(int L,int R,int l,int r,int rt,int val)
- {
- if(L<=l&&r<=R)
- {
- t[rt].cnt+=val;//加上标记的值
- pushdown(l,r,rt);//像下更新节点
- return;
- }
- int m=(l+r)>>;
- if(L<=m) update(L,R,lson,val);
- if(R>m) update(L,R,rson,val);
- pushdown(l,r,rt);
- }
- int main()
- {
- int n,q=;
- double a,b,c,d;
- while(~scanf("%d",&n)&&n)
- {
- mem(t,);
- int num=;
- for(int i=; i<n; i++)
- {
- scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
- X[num]=a;
- e[num++]=Seg(a,c,b,);//矩形下面用1来标记吗
- X[num]=c;
- e[num++]=Seg(a,c,d,-);//上面用-1来标记
- }
- sort(X,X+num);//用于离散化
- sort(e,e+num);//把矩形的边的纵坐标从小到大排序
- int m=unique(X,X+num)-X;
- double ans=;
- for(int i=; i<num; i++)
- {
- int l=lower_bound(X,X+m,e[i].l)-X;//找出离散化以后的值
- int r=lower_bound(X,X+m,e[i].r)-X-;
- update(l,r,,m,,e[i].f);
- ans+=t[].len*(e[i+].h-e[i].h);
- }
- printf("Test case #%d\nTotal explored area: %.2lf\n\n",q++,ans);
- }
- return ;
- }
POJ 1151 线段树+扫描线(计算矩形面积并)的更多相关文章
- POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]
题意:求矩形面积并 分析:使用线段树+扫描线...因为坐标是浮点数的,因此还需要离散化! 把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用col表示该区间有多少个下边,sum代表该区 ...
- hdu1542 线段树扫描线求矩形面积的并
题意: 给你n个正方形,求出他们的所占面积有多大,重叠的部分只能算一次. 思路: 自己的第一道线段树扫描线题目,至于扫描线,最近会写一个总结,现在就不直接在这里写了,说下我的方 ...
- POJ 1151 Atlantis(线段树-扫描线,矩形面积并)
题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...
- hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交
E - 秋实大哥与家 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...
- hdu 4419 线段树 扫描线 离散化 矩形面积
//离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...
- POJ 1151 线段树+扫描线
题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~ //By SiriusRen #include <cmath> #include ...
- HDU 1542"Atlantis"(线段树+扫描线求矩形面积并)
传送门 •题意 给你 n 矩形,每个矩形给出你 $(x_1,y_1),(x_2,y_2)$ 分别表示这个矩形的左下角和右上角坐标: 让你求这 n 个矩形并的面积: 其中 $x \leq 10^{5} ...
- hdu1828 线段树扫描线求矩形面积的周长
题意: 给你n个矩形,问你这n个矩形所围成的图形的周长是多少. 思路: 线段树的扫描线简单应用,这个题目我用的方法比较笨,就是扫描两次,上下扫描,求出多边形的上下边长和,然后同 ...
随机推荐
- JS中数据结构之栈
1.栈的基本介绍 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出( ...
- vue.js中created()与activated()的个人使用理解
created():在创建vue对象时,当html渲染之前就触发:但是注意,全局vue.js不强制刷新或者重启时只创建一次,也就是说,created()只会触发一次:这时候只有dom没有数据挂载. a ...
- window 任务管理器
用的是win10 系统,一般window都差不多. 1.查看进程: 2.查看端口:性能 --> 打开资源资源监视器 --> 网络 --> 侦听端口 3.查看磁盘活动(查看文件被哪个进 ...
- mysql的windows客户端链接远程全套案例
我是linux 的服务器,navicat12的客户端, 开始链接的时候需要开服务器上得对外爆漏端口 3306,方法: 添加指定需要开放的端口: firewall-cmd --add-port=/tcp ...
- 在Js中得到元素的子元素集合注意事项
http://www.cnblogs.com/phonefans/archive/2008/09/04/1283739.html 在Js中得到元素的子元素集合注意事项 费话少说,直接看例子: 1 &l ...
- laravel 向多视图及所有视图传递数据变量
向单个视图传递变量 1.使用with()方法 : view('user.lists')->with('title',$title); 2.直接view()传参: view('user.lists ...
- Java并发AtomicBoolean类~
java.util.concurrent.atomic.AtomicBoolean类提供了可以原子读取和写入的底层布尔值的操作,并且还包含高级原子操作. AtomicBoolean支持基础布尔变量上的 ...
- UVA1629_Cake slicing
Cake slicing 给你一个矩形大小,和每个樱桃的坐标,现在让你去切使得切之后的小矩形包含一个樱桃,每次切的代价是切痕的长度,问你最小代价是多少 思路: 首先要明白一点,不能切除一个不含樱桃的矩 ...
- Apache Shiro 会话+缓存+记住我(三)
1.会话管理SessionDao和SessionManager 1)安装Redis 2)依赖 <dependency> <groupId>redis.clients</g ...
- A Bite Of React(1)
react: component and views : produce html abd add them on a page( in the dom) <import React from ...