题意:
     给定n个矩形的对角坐标,分别是左下和右上,浮点型,求矩形覆盖的面积。

思路:

      基本的线段树扫描线求面积,没有坑点,不解释了,提示一点,有的题尤其是线段树扫描线的题需要离散化的时候建议二分去找,别map,记得之前map超时过很多次,但不是针对这个题目,这个题数据量不大,怎么都行,发现codeblock这个编译器定义宏然后在定义结构体的时候变量名字相同导致编译不过去,我之前用的DEV也是这么写的,记得能编译过去,不知道为啥。

#include<stdio.h>
#include<string.h>
#include<algorithm>//#define l ,mid ,t << 1
//#define mid ,r ,t << 1 | 1
#define N 105using namespace std;typedef struct
{double l ,r ,h ,mk;
}EDGE;double num[105*2*2] ,tmp[105*2*2];
double len[105*2*2*4];
int cnt[105*2*2*4];
EDGE E[105*2];bool camp(EDGE a ,EDGE b)
{return a.h < b.h || a.h == b.h && a.mk < b.mk;
}void PushUp(int l ,int r ,int t)
{if(cnt[t]) len[t] = num[r] - num[l];else if(l + 1 == r) len[t] = 0;else len[t] = len[t<<1] + len[t<<1|1];
}void Update(int l ,int r ,int t ,int a ,int b ,int c)
{if(a == l && b == r){cnt[t] += c;PushUp(l ,r ,t);return ;}int mid = (l + r) >> 1;if(b <= mid) Update(l,mid ,t << 1 ,a ,b ,c);else if(a >= mid) Update(mid ,r ,t << 1 | 1 ,a ,b ,c);else{Update(l ,mid ,t << 1 ,a ,mid ,c);Update(mid ,r ,t << 1 | 1 ,mid  ,b ,c);}PushUp(l ,r ,t);
}void BuidTree()
{memset(cnt ,0 ,sizeof(cnt));memset(len ,0 ,sizeof(len));return ;
}int search2(double now ,int n)
{int low = 1 ,up = n ,mid ,ans;while(low <= up){mid = (low + up) >> 1;if(now <= num[mid]){ans = mid;up = mid - 1;}else low = mid + 1;}return ans;
}int main ()
{int i ,n ,id ,cas = 1;double x1 ,y1 ,x2 ,y2;double Ans;while(~scanf("%d" ,&n) && n){for(id = 0 ,i = 1 ;i <= n ;i ++){scanf("%lf %lf %lf %lf" ,&x1 ,&y1 ,&x2 ,&y2);E[++id].l = x1;E[id].r = x2 ,E[id].h = y1 ,E[id].mk = 1;tmp[id] = x1;E[++id].l = x1;E[id].r = x2 ,E[id].h = y2 ,E[id].mk = -1;tmp[id] = x2;}sort(E + 1 ,E + id + 1 ,camp);sort(tmp + 1 ,tmp + id + 1);int n2 = n * 2;for(id = 0 ,i = 1 ;i <= n2 ;i ++){if(i == 1 || tmp[i] != tmp[i-1])num[++id] = tmp[i];}BuidTree();E[0].h = E[1].h;Ans = 0;for(i = 1 ;i <= n2 ;i ++){Ans += len[1] * (E[i].h - E[i-1].h);int l = search2(E[i].l ,id);int r = search2(E[i].r ,id);Update(1 ,id ,1 ,l ,r ,E[i].mk);}printf("Test case #%d\n" ,cas ++);printf("Total explored area: %.2lf\n\n" ,Ans);}return 0;}



POJ1151基本的扫描线求面积相关推荐

  1. POJ 1389 Area of Simple Polygons(扫描线求面积)

    思路:纯纯扫描线求面积模板题,求点赞qaq. #include<iostream> #include<cstdio> #include<cstring> #incl ...

  2. POJ1151(线段树+扫描线求矩形面积并)

    题目:http://poj.org/problem?id=1151 #include <iostream> #include <string.h> #include <a ...

  3. 线段树扫描线模板(求面积和周长) Picture

    求面积: #include <iostream> #include <stdio.h> #include <algorithm> using namespace s ...

  4. CF1368G Shifting Dominoes(扫描线求矩阵的并集)

    CF1368G Shifting Dominoes problem solution code problem 题目链接 solution 求的是最后棋盘本质不同的个数,而本质不同等价于两个空格位置不 ...

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

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

  6. 三圆相交阴影部分面积_这题要证明圆的切线并求阴影面积,分割图形求面积法是解题关键...

    各位关注数学世界的朋友,大家好!数学世界将继续为大家分享初中数学中有关圆的综合题,笔者希望通过对习题的分析与讲解,能够为广大初中生学习相关数学知识提供一些帮助! 长期关注我们的朋友都知道,数学世界一直 ...

  7. poj 1151(线段树求面积并)

    解题思路:线段树求面积并,水题 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  8. hdu 2461(线段树求面积并)

    题意:给出N个矩形,M次询问 每次询问给出R个,问这R个矩形围成的面积 解题思路:对于每次询问,做一次线段树求面积的并操作. 每个节点保存的信息有l,r,cover,len分别表示该节点表示的区间[l ...

  9. POJ3348 Cows【凸包+多边形求面积】

    POJ3348Cows 凸包+多边形求面积 个人分类: 计算几何凸包 Language: Default Cows Time Limit: 2000MS   Memory Limit: 65536K ...

最新文章

  1. LeetCode 报错解决 heap-buffer-overflow Heap-use-after-free Stack-buffer-overflow Global-buffer-overflow
  2. java29:Map
  3. Mysql创建触发器实现不同表的插入、更新、删除操作
  4. go-ethereum-code-analysis 以太坊源码分析
  5. nodejs新建服务器
  6. 用 Python 制作子弹图也这么简单,爱了~
  7. asp.net 2.0下用access开发的时候要注意的问题
  8. c# list 自定义排序
  9. VS2015:安装适用于windows桌面的visual c++2015
  10. 第三次学JAVA再学不好就吃翔(part96)--异常
  11. 再见了,面向对象编程
  12. Delphi2010新手学习(1)
  13. vs2010字符集问题
  14. HJ6302网关模块与富士PXR5系列温控器的通讯
  15. 敏捷教练如何辅导发布计划的制定之开展行动
  16. edm html超链接,EDM邮件中的html/css兼容性问题
  17. 信用社计算机专业大纲,广西农村信用社计算机专业试题
  18. hihocoder 博弈三连发
  19. 每天新老用户,日活,周活,月活的hive计算
  20. DeepMind VS Meta:实现纳什均衡理性最优解,还是多人非零和博弈算法更强大?

热门文章

  1. Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api(二十)
  2. 自定义控件(一) Activity的构成(PhoneWindow、DecorView)
  3. java中处理字符编码(网页与数据库)(转)
  4. 在新加坡做面试官的经历 (Interviewer Experience for UI/UX Designer in Singapore)
  5. js获取本月第几周和本年第几周
  6. android技术下载
  7. 晒晒公司整改后的拓扑图和设备
  8. jquery视频教程
  9. 听得我都激动了……喝死奥巴马,你怎么看?
  10. JSP 调用java 常量 枚举