1. #include<iostream>
  2. #include<vector>
  3. #include<cmath>
  4. #include<algorithm>
  5. using namespace std;
  6. #define y1 y11
  7. #define ls rt<<1,l,m
  8. #define rs rt<<1|1,m+1,r
  9. const int maxn=1e3+;
  10. double x1[maxn];
  11. double y1[maxn];
  12. double x2[maxn];
  13. double y2[maxn];
  14. vector<double> vx;
  15. vector<double> vy;
  16. double x[maxn];
  17. double y[maxn];
  18. struct node { int yl,yr,k; }pp[maxn];
  19. vector<node> vxxx[maxn];
  20. double tree[*maxn];
  21. double ans[*maxn];
  22. int lazy[*maxn];
  23.  
  24. int tot=;
  25. void push_up(int rt) { tree[rt]=tree[rt<<]+tree[rt<<|]; }
  26. //void push_down(int rt,int len) { lazy[rt<<1]+=lazy[rt]; lazy[rt<<1|1]+=lazy[rt]; lazy[rt]=0; }
  27. void build(int rt,int l,int r)
  28. {
  29. if(l==r) { tot++; tree[l]=vy[tot]-vy[tot-]; return ; }
  30. int m=(l+r)>>; build(ls); build(rs);push_up(rt);
  31. }
  32. void update(int p,int delta,int rt,int l,int r)
  33. {
  34. if(l==r) { tree[rt]+=delta; return ; }
  35. int m=(l+r)>>;
  36. if(p<=m)update(p,delta,ls);
  37. else update(p,delta,rs);
  38. push_up(rt);
  39. }
  40. void Update(int L,int R,int delta,int rt,int l,int r)
  41. {
  42. if(L<=l&&r<=R) { lazy[rt]+=delta; return ; }
  43. if(lazy[rt]) push_down(rt,r-l+);
  44. int m=(l+r)>>;
  45. if(L<=m)Update(L,R,delta,ls);
  46. if(R>m)Update(L,R,delta,rs);
  47. push_up(rt);
  48. }
  49. int main()
  50. {
  51. int cnt=;
  52. int n;
  53. while()
  54. {
  55. scanf("%d",&n); if(n==) break;
  56. for(int i=;i<=n;i++) scanf("%lf %lf %lf %lf",&x1[i],&y1[i],&x2[i],&y2[i]);
  57. for(int i=;i<=n;i++)
  58. {
  59. vx.push_back(x1[i]);
  60. vx.push_back(x2[i]);
  61. vy.push_back(y1[i]);
  62. vy.push_back(y2[i]);
  63. }
  64. sort(vx.begin(),vx.end()); vx.erase(unique(vx.begin(),vx.end()),vx.end());
  65. for(int i=;i<vx.size();i++) x[i]=vx[i];
  66. sort(vy.begin(),vy.end()); vy.erase(unique(vy.begin(),vy.end()),vy.end());
  67. for(int i=;i<vy.size();i++) y[i]=vy[i];
  68. for(int i=;i<=n;i++)
  69. {
  70. int k=lower_bound(vx.begin(),vx.end(),x1[i])-vx.begin();
  71. node p; p.yl=y1[i]; p.yr=y2[i]; p.k=;
  72. vxxx[k].push_back(p);
  73. k=lower_bound(vx.begin(),vx.end(),x2[i])-vx.begin();
  74. p.k=-;
  75. vxxx[k].push_back(p);
  76. }
  77. int m=vy.size()-;
  78. build(,,m);
  79. double ans=;
  80. for(int i=;i<vx.size();i++)
  81. {
  82. if(i==)
  83. {
  84. for(int j=;j<=vxx[i].size();j++)
  85. {
  86. node p=vxxx[i][j];
  87. int l=lower_bound(vy.begin(),vy.end(),p.yl)-vy.begin();
  88. int r=lower_bound(vy.begin(),vy.end(),p.yr)-vy.begin();
  89. update(l,r,p.k,,,m);
  90. }
  91. }
  92. }
  93. }
  94. }

poj 1151 (未完成) 扫描线 线段树 离散化的更多相关文章

  1. POJ 1151 Atlantis (扫描线+线段树)

    题目链接:http://poj.org/problem?id=1151 题意是平面上给你n个矩形,让你求矩形的面积并. 首先学一下什么是扫描线:http://www.cnblogs.com/scau2 ...

  2. POJ 1151:Atlantis 线段树+扫描线

    Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19374   Accepted: 7358 Descrip ...

  3. 矩形面积并-扫描线 线段树 离散化 模板-poj1151 hdu1542

    今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记, ...

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

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

  5. HDU 1255 覆盖的面积 (扫描线 线段树 离散化 矩形面积并)

    题目链接 题意:中文题意. 分析:纯手敲,与上一道题目很相似,但是刚开始我以为只是把cnt>=0改成cnt>=2就行了,. 但是后来发现当当前加入的线段的范围之前 还有线段的时候就不行了, ...

  6. BZOJ 1645: [Usaco2007 Open]City Horizon 城市地平线 扫描线 + 线段树 + 离散化

    Code: #include<cstdio> #include<algorithm> #include<string> #define maxn 1030000 # ...

  7. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  8. HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)

    Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...

  9. POJ 2528 Mayor's posters(线段树+离散化)

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

随机推荐

  1. js 数组元素遍历

    <html> <body> <script type="text/javascript"> var x var mycars = new Arr ...

  2. python 获取subprocess进程执行后返回值

    test.py #coding=utf- import subprocess compilePopen = subprocess.Popen('gcc haha',shell=True,stderr= ...

  3. IDEA复制某个类的包名路径

    在对应的类中右键: 然后看图:

  4. Android 开发版本统一

    一.概述 对于 Android 开发版本的统一涉及到的东西就是 Gradle 中的全局设置,我们通过配置 gradle 也就是编写 Groovy 代码将开发中的版本号设置为全局参数.这样就能够在 mo ...

  5. [术语] CRUD 增删改查

    Data Manipulation Language, DML 数据操纵语言Insert update delete CRUD :create read update delete

  6. php-parser在Aop编程中的使用

    在laravel下使用php-parser实现aop composer require nikic/php-parser Test.php <?php /** * Created by PhpS ...

  7. YII框架实现 RBAC

    (1).在  common\config\main.php添加 'components' => [ ’authManager’ => [            ’class’ => ...

  8. javascript高级程序设计第3版——第一章概括

    最近发现Xmind思维导图是个好东西,刚好开始看书,被用来归纳最好不过了

  9. GDAL源码编译(32位)

    GDAL源码编译(32位) 前言 GDAL:GDAL/OGR 是一个地理空间数据的格式转换及处理工具.官网:https://www.gdal.org/ swig:SWIG是个帮助使用C或者C++编写的 ...

  10. linux c使用socket进行http 通信,并接收任意大小的http响应(一)

    如何进行http通信呢?我们打开任意一个浏览器,按F12,再选择网络,然后打开任意一个网站,我们就可以看到浏览器和网站通信的过程 如下图: 然后,我们任意点击一条记录,可以看到 然后,查找http协议 ...