题意:求矩形面积的并
思路:
注意是[l,mid][mid,r] 这是真正的线段了
就当扫描线模板使吧~

//By SiriusRen
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define eps 1e-5
int N,tot,n,cases;
double y[666],ans=0;
struct Node{double x,y1,y2;int cover;}node[666];
struct Tree{double l,r,len;int cover;}tree[66666];
bool cmp(Node a,Node b){return a.x<b.x;}
void build(int l,int r,int pos){tree[pos].l=y[l],tree[pos].r=y[r],tree[pos].len=tree[pos].cover=0;if(l+1==r)return;int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;build(l,mid,lson),build(mid,r,rson);
}
void push_up(int l,int r,int pos){if(tree[pos].cover>0)tree[pos].len=tree[pos].r-tree[pos].l;else if(l+1==r)tree[pos].len=0;else tree[pos].len=tree[pos<<1].len+tree[pos<<1|1].len;
}
void update(int l,int r,int pos,Node jy){if(tree[pos].l>=jy.y1&&tree[pos].r<=jy.y2){tree[pos].cover+=jy.cover;push_up(l,r,pos);return;}int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;if(tree[lson].r>=jy.y2)update(l,mid,lson,jy);else if(tree[rson].l<=jy.y1)update(mid,r,rson,jy);else update(l,mid,lson,jy),update(mid,r,rson,jy);push_up(l,r,pos);
}
int main(){while(scanf("%d",&N)&&N){ans=tot=0;for(int i=1;i<=N;i++){double X1,Y1,X2,Y2;scanf("%lf%lf%lf%lf",&X1,&Y1,&X2,&Y2);node[++tot].x=X1,node[tot].y1=Y1,node[tot].y2=Y2;node[tot].cover=1;y[tot]=Y1;node[++tot].x=X2,node[tot].y1=Y1,node[tot].y2=Y2;node[tot].cover=-1;y[tot]=Y2;}sort(node+1,node+1+tot,cmp),sort(y+1,y+1+tot);n=unique(y+1,y+1+tot)-y-1;build(1,n,1),update(1,n,1,node[1]);for(int i=2;i<=tot;i++){ans+=tree[1].len*(node[i].x-node[i-1].x);update(1,n,1,node[i]);}printf("Test case #%d\nTotal explored area: %.2lf\n\n",++cases,ans);}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532275.html

POJ 1151 线段树+扫描线相关推荐

  1. 线段树扫描线求矩形周长详解

    线段树扫描线求矩形周长详解 原创 wucstdio 最后发布于2018-04-24 16:12:09 阅读数 841 收藏 发布于2018-04-24 16:12:09 版权声明:本文为博主原创文章, ...

  2. hdu3255 线段树扫描线求体积

    题意:       给你n个矩形,每个矩形上都有一个权值(该矩形单位面积的价值),矩形之间可能重叠,重叠部分的权值按照最大的算,最后问这n个矩形组成的图形的最大价值. 思路:       线段树扫描线 ...

  3. hdu1542 线段树扫描线求矩形面积的并

    题意:       给你n个正方形,求出他们的所占面积有多大,重叠的部分只能算一次. 思路:       自己的第一道线段树扫描线题目,至于扫描线,最近会写一个总结,现在就不直接在这里写了,说下我的方 ...

  4. hdu 1542 Atlantis (线段树+扫描线)

    http://acm.hdu.edu.cn/showproblem.php?pid=1542 单纯的线段树+扫描线求面积并,需要离散化. code: #include <cstdlib> ...

  5. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

    版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...

  6. bzoj 1645: [Usaco2007 Open]City Horizon 城市地平线(线段树扫描线)

    1645: [Usaco2007 Open]City Horizon 城市地平线 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 732  Solved: ...

  7. 亚特兰蒂斯【线段树+扫描线+离散化】

    亚特兰蒂斯[线段树+扫描线+离散化] POJ1151.ACwing247 题目: 有几个古希腊书籍中包含了对传说中的亚特兰蒂斯岛的描述. 其中一些甚至包括岛屿部分地图. 但不幸的是,这些地图描述了亚特 ...

  8. 2016 UESTC Training for Data Structures F - 郭大侠与“有何贵干?” CDOJ 1335 线段树 扫描线 离散化

    F - 郭大侠与"有何贵干?" 就是给一个三维空间,和N个长方体,问覆盖K次的体积 x和y都是1e9,但是z是[1,3],所以可以把这个分为两个二维平面,求被覆盖K次的面积,最后加 ...

  9. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

最新文章

  1. 产品思维-产品初期准备
  2. jQuery——插入元素节点的方法
  3. 台球当中,击球的力量能传递多远?
  4. Wordcounter,使用Lambdas和Fork / Join计算Java中的单词数
  5. 小米A3真机开箱照片曝光:水滴屏+后置三摄
  6. java 输入输出流知识_Java知识点总结(JavaIO-字节流)
  7. Windows7 445端口漏洞
  8. 安卓磁链搜索下载播放和原理探索
  9. 小米最新系统android 10,国内最快推送安卓10稳定版系统!小米新旗舰出厂标配稳了...
  10. 【已解决】MATLAB未定义函数或变量 ‘wavread‘,以及audioread,audiowrite,wavwrite
  11. 一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
  12. 用新的思维方式去解决问题
  13. 怎么和女生找话题?四个技巧让你话题不断
  14. 汽车百科系列之(七): 你喜欢什么样的车身颜色
  15. Kubernetes探针检测
  16. 股市温度计--买菜大妈进场的量化指标
  17. ensp华为交换机基础命令
  18. 国内外经典开源数据大全!
  19. 应广单片机红外发射例程
  20. 有可以模拟钢琴弹奏乐曲的手机软件吗?

热门文章

  1. 37℃已成历史:人类体温越来越低意味着什么?
  2. 宛如造句,小学生怎么用宛如造句?
  3. 什么样的合作方式最舒服
  4. 无论你是用什么样的模式去拓展市场
  5. 终于明白我做小生意为啥赔钱了,主要原因还是进货渠道不行
  6. 工作与生活如何平衡?
  7. 数据线为什么不弄两头都是Typec接口的呢?
  8. Evaluate that you caught up with the price cut
  9. [leetcode]36. Valid Sudoku c语言
  10. azure云数据库_Azure SQL数据库中的漏洞评估和高级威胁防护