前一篇博客有了讲解就不再叙述了

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<iostream>
  5. #include<cstdlib>
  6. #include<algorithm>
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define inf 0x3f3f3f3f
  9. #define N 220
  10. #define ll long long
  11. using namespace std;
  12. #define lson l,m,rt<<1
  13. #define rson m+1,r,rt<<1|1
  14. struct Seg
  15. {
  16. double l,r,h;
  17. int f;
  18. Seg() {}
  19. Seg(double a,double b,double c,int d):l(a),r(b),h(c),f(d) {}
  20. bool operator < (const Seg &cmp) const
  21. {
  22. return h<cmp.h;
  23. }
  24. } e[N];
  25. struct node
  26. {
  27. int cnt;
  28. double len;
  29. } t[N<<];
  30. double X[N];
  31. void pushdown(int l,int r,int rt)
  32. {
  33. if(t[rt].cnt)//当前的边被标记,就把当前的长度加上
  34. t[rt].len=X[r+]-X[l];
  35. else if(l==r)//当为一个点的时候长度为0
  36. t[rt].len=;
  37. else//其他情况把左右两个区间的值加上
  38. t[rt].len=t[rt<<].len+t[rt<<|].len;
  39. }
  40. void update(int L,int R,int l,int r,int rt,int val)
  41. {
  42. if(L<=l&&r<=R)
  43. {
  44. t[rt].cnt+=val;//加上标记的值
  45. pushdown(l,r,rt);//像下更新节点
  46. return;
  47. }
  48. int m=(l+r)>>;
  49. if(L<=m) update(L,R,lson,val);
  50. if(R>m) update(L,R,rson,val);
  51. pushdown(l,r,rt);
  52. }
  53. int main()
  54. {
  55. int n,q=;
  56. double a,b,c,d;
  57. while(~scanf("%d",&n)&&n)
  58. {
  59. mem(t,);
  60. int num=;
  61. for(int i=; i<n; i++)
  62. {
  63. scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
  64. X[num]=a;
  65. e[num++]=Seg(a,c,b,);//矩形下面用1来标记吗
  66. X[num]=c;
  67. e[num++]=Seg(a,c,d,-);//上面用-1来标记
  68. }
  69. sort(X,X+num);//用于离散化
  70. sort(e,e+num);//把矩形的边的纵坐标从小到大排序
  71. int m=unique(X,X+num)-X;
  72. double ans=;
  73. for(int i=; i<num; i++)
  74. {
  75. int l=lower_bound(X,X+m,e[i].l)-X;//找出离散化以后的值
  76. int r=lower_bound(X,X+m,e[i].r)-X-;
  77. update(l,r,,m,,e[i].f);
  78. ans+=t[].len*(e[i+].h-e[i].h);
  79. }
  80. printf("Test case #%d\nTotal explored area: %.2lf\n\n",q++,ans);
  81. }
  82. return ;
  83. }

POJ 1151 线段树+扫描线(计算矩形面积并)的更多相关文章

  1. POJ-1151-Atlantis(线段树+扫描线+离散化)[矩形面积并]

    题意:求矩形面积并 分析:使用线段树+扫描线...因为坐标是浮点数的,因此还需要离散化! 把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去,用col表示该区间有多少个下边,sum代表该区 ...

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

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

  3. POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

    题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...

  4. hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  6. hdu 4419 线段树 扫描线 离散化 矩形面积

    //离散化 + 扫描线 + 线段树 //这个线段树跟平常不太一样的地方在于记录了区间两个信息,len[i]表示颜色为i的被覆盖的长度为len[i], num[i]表示颜色i 『完全』覆盖了该区间几层. ...

  7. POJ 1151 线段树+扫描线

    题意:求矩形面积的并 思路: 注意是[l,mid][mid,r] 这是真正的线段了 就当扫描线模板使吧~ //By SiriusRen #include <cmath> #include ...

  8. HDU 1542"Atlantis"(线段树+扫描线求矩形面积并)

    传送门 •题意 给你 n 矩形,每个矩形给出你 $(x_1,y_1),(x_2,y_2)$ 分别表示这个矩形的左下角和右上角坐标: 让你求这 n 个矩形并的面积: 其中 $x \leq 10^{5} ...

  9. hdu1828 线段树扫描线求矩形面积的周长

    题意:       给你n个矩形,问你这n个矩形所围成的图形的周长是多少. 思路:       线段树的扫描线简单应用,这个题目我用的方法比较笨,就是扫描两次,上下扫描,求出多边形的上下边长和,然后同 ...

随机推荐

  1. JS中数据结构之栈

    1.栈的基本介绍 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出( ...

  2. vue.js中created()与activated()的个人使用理解

    created():在创建vue对象时,当html渲染之前就触发:但是注意,全局vue.js不强制刷新或者重启时只创建一次,也就是说,created()只会触发一次:这时候只有dom没有数据挂载. a ...

  3. window 任务管理器

    用的是win10 系统,一般window都差不多. 1.查看进程: 2.查看端口:性能 --> 打开资源资源监视器 --> 网络 --> 侦听端口 3.查看磁盘活动(查看文件被哪个进 ...

  4. mysql的windows客户端链接远程全套案例

    我是linux 的服务器,navicat12的客户端, 开始链接的时候需要开服务器上得对外爆漏端口 3306,方法: 添加指定需要开放的端口: firewall-cmd --add-port=/tcp ...

  5. 在Js中得到元素的子元素集合注意事项

    http://www.cnblogs.com/phonefans/archive/2008/09/04/1283739.html 在Js中得到元素的子元素集合注意事项 费话少说,直接看例子: 1 &l ...

  6. laravel 向多视图及所有视图传递数据变量

    向单个视图传递变量 1.使用with()方法 : view('user.lists')->with('title',$title); 2.直接view()传参: view('user.lists ...

  7. Java并发AtomicBoolean类~

    java.util.concurrent.atomic.AtomicBoolean类提供了可以原子读取和写入的底层布尔值的操作,并且还包含高级原子操作. AtomicBoolean支持基础布尔变量上的 ...

  8. UVA1629_Cake slicing

    Cake slicing 给你一个矩形大小,和每个樱桃的坐标,现在让你去切使得切之后的小矩形包含一个樱桃,每次切的代价是切痕的长度,问你最小代价是多少 思路: 首先要明白一点,不能切除一个不含樱桃的矩 ...

  9. Apache Shiro 会话+缓存+记住我(三)

    1.会话管理SessionDao和SessionManager 1)安装Redis 2)依赖 <dependency> <groupId>redis.clients</g ...

  10. A Bite Of React(1)

    react: component and views : produce html abd add them on a page( in the dom) <import React from ...