矩形面积并

线段树-扫描线裸题

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<math.h>
  5. using namespace std;
  6. const int maxm=2e3+;
  7. const double eps=1e-;
  8.  
  9. struct seg{
  10. double x,y1,y2;
  11. int c;
  12. bool operator < (const seg a)const{
  13. return x<a.x;
  14. }
  15. }s[maxm];
  16.  
  17. double y[maxm];
  18. double st[maxm<<],st2[maxm<<];
  19. int cov[maxm<<];
  20.  
  21. void pushup(int o,int l,int r){
  22. if(cov[o]>){
  23. st[o]=st2[o]=y[r]-y[l];
  24. }
  25. else if(cov[o]==){
  26. st[o]=y[r]-y[l];
  27. if(l+==r)st2[o]=;
  28. else st2[o]=st[o<<]+st[o<<|];
  29. }
  30. else{
  31. if(l+==r)st[o]=st2[o]=;
  32. else{
  33. st[o]=st[o<<]+st[o<<|];
  34. st2[o]=st2[o<<]+st2[o<<|];
  35. }
  36. }
  37. }
  38.  
  39. void update(int o,int l,int r,seg a){
  40. if(y[l]>=a.y1&&y[r]<=a.y2){
  41. cov[o]+=a.c;
  42. pushup(o,l,r);
  43. return;
  44. }
  45. if(l+==r)return;
  46. int m=l+((r-l)>>);
  47. if(a.y1<=y[m])update(o<<,l,m,a);
  48. if(a.y2>y[m])update(o<<|,m,r,a);
  49. pushup(o,l,r);
  50. }
  51.  
  52. int main(){
  53. int T;
  54. scanf("%d",&T);
  55. while(T--){
  56. int n;
  57. scanf("%d",&n);
  58. memset(st,,sizeof(st));
  59. memset(cov,,sizeof(cov));
  60. memset(st2,,sizeof(st2));
  61. for(int i=;i<=n;++i){
  62. double x1,y1,x2,y2;
  63. scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
  64. /* s[2*i-1].x=x1;
  65. s[2*i].x=x2;
  66. s[2*i-1].y1=y1;
  67. s[2*i].y1=y1;
  68. s[2*i-1].y2=y2;
  69. s[2*i].y2=y2;
  70. s[2*i-1].c=1;
  71. s[2*i].c=-1;
  72. y[2*i-1]=y1;
  73. y[2*i]=y2;*/
  74. s[*i-].x=x1;s[*i-].y1=y1;s[*i-].y2=y2;s[*i-].c=;
  75. y[*i-]=y1;
  76. s[*i].x=x2;s[*i].y1=y1;s[*i].y2=y2;s[*i].c=-;
  77. y[*i]=y2;
  78. }
  79. sort(y+,y+*n+);
  80. sort(s+,s+*n+);
  81. /* int cnt=1;
  82. for(int i=2;i<=2*n;++i){
  83. if(y[i]!=y[i-1])y[++cnt]=y[i];
  84. }*/
  85. int cnt=*n;
  86. double ans=;
  87. update(,,cnt,s[]);
  88. for(int i=;i<=*n;++i){
  89. ans+=st2[]*(s[i].x-s[i-].x);
  90. update(,,cnt,s[i]);
  91. }
  92. printf("%.2lf\n",ans);
  93. }
  94. return ;
  95. }

hdu1255 覆盖的面积 线段树-扫描线的更多相关文章

  1. hdu1255 覆盖的面积 线段树+里离散化求矩形面积的交

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 求矩形面积的交的线段树题目,刚做了求并的题目,再做这个刚觉良好啊,只要再加一个表示覆盖次数大于1 ...

  2. HDU 1255 覆盖的面积 (线段树+扫描线+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...

  3. HDU 1255 覆盖的面积 线段树+扫描线

    同 POJ1151 这次是两次 #include <iostream> #include <algorithm> #include <cstdio> #includ ...

  4. HDU1255 覆盖的面积 —— 求矩形交面积 线段树 + 扫描线 + 离散化

    题目链接:https://vjudge.net/problem/HDU-1255 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<= ...

  5. hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memo ...

  6. H - 覆盖的面积(线段树-线段扫描 + 离散化(板题))

    给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1 ...

  7. HDU 1255 覆盖的面积(线段树面积并)

      描述 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正 ...

  8. HDU 1255 覆盖的面积(线段树:扫描线求面积并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题目大意:给你若干个矩形,让你求这些矩形重叠两次及以上的部分的面积. 解题思路:模板题,跟HDU ...

  9. hdu1255 矩阵的交 线段树+扫描线

    /* 不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么, 应该是,可以确定,这个区间被完全覆盖了1次, 而有没有被完全覆盖两次或以上则不知道无法确定,那么怎么怎么办了, 只要加上t[ ...

随机推荐

  1. SSH Secure Shell Client--- the host may be dow

    the host may be down,or there may be a problem with the network connection. Sometimes such problems ...

  2. WPF:改变ListBoxItem和ListViewItem的颜色

    目录 1. 改变ListBoxItem颜色 2. ListViewItem的颜色设置 注意: 本文仅讨论默认ListBoxItem和ListViewItem的鼠标指向和被选择后的前景和背景颜色设置.如 ...

  3. Python解析Wav文件并绘制波形的方法

    资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...

  4. Hexo博客搭建教程

    1.使用淘宝npm源 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 2.安装hexo cnpm install -g ...

  5. 关于RM中的X3014错误,以及mul() 、天空盒

    关于  error X3014: incorrect number of arguments to numeric-type constructor 这个错误应该是某个类似float4 这样的变量初始 ...

  6. 1.4 C++内联函数(inline)

    参考:http://www.weixueyuan.net/view/6330.html C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体 ...

  7. DevExpress v17.2新版亮点—Windows 10篇

    用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Windows 10 Controls v17.2 的新功能,快来下载试用新版本! ...

  8. MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(五)

    MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...

  9. nginx对上传文件大小的限制

    前几天项目组的一个小伙子过来跟我说,他本地上传的文件没问题,但是在测试环境上测试的时候上传失败. 后来发现时nginx对上传文件的大小做了限制,默认是1M,那么按照需求我们更改了限值为20M vi c ...

  10. kmp算法中的nextval实例解释

    求nextval数组值有两种方法,一种是不依赖next数组值直接用观察法求得,一种方法是根据next数组值进行推理,两种方法均可使用,视更喜欢哪种方法而定. 本文主要分析nextval数组值的第二种方 ...