思路:纯纯扫描线求面积模板题,求点赞qaq。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 1e3+20;
double xx[maxn<<1];
struct Edge
{double l,r,h;int inout;Edge() {}Edge(double x1,double x2, double y, int inout):l(x1),r(x2),h(y),inout(inout) {}
} e[maxn<<1];bool cmp(Edge a, Edge b)
{return a.h<b.h;
}
struct Tree
{int l, r;double len;int s;int mid(){return (l+r)>>1;}
}tr[maxn<<2];
void pushup(int now)
{if(tr[now].s)tr[now].len = xx[tr[now].r+1]-xx[tr[now].l];else if(tr[now].l == tr[now].r)tr[now].len = 0;//这里不能写returnelsetr[now].len = tr[now<<1].len + tr[now<<1|1].len;
}
void build(int now, int l, int r)
{tr[now].l = l, tr[now].r = r;tr[now].s = 0, tr[now].len = 0;int mid = tr[now].mid();if(tr[now].l == tr[now].r)return;build(now<<1,l,mid);build(now<<1|1,mid+1,r);
}
void update(int now,int l, int r,int val)
{if(tr[now].l>=l && tr[now].r <=r){tr[now].s +=val;pushup(now);return;}int mid = tr[now].mid();if(mid>=r){update(now<<1,l,r,val);}else if(mid<l)update(now<<1|1,l,r,val);else{update(now<<1, l,mid,val);update(now<<1|1, mid+1, r, val);}pushup(now);}int main()
{double x1, x2,y1,y2;int flag= 1;while(scanf("%lf%lf%lf%lf",&x1, &y1, &x2, &y2)!=EOF){int cnt = 0;if(flag == 0&&x1 == -1 && x2 == -1 && y1 == -1 && y2 == -1)break;elseflag= 1;xx[++cnt] = x1;e[cnt] = Edge(x1, x2,y1,1);xx[++cnt] = x2;e[cnt] = Edge(x1,x2,y2,-1);while(scanf("%lf%lf%lf%lf",&x1, &y1, &x2, &y2)!=EOF){if(x1 == -1 && x2 == -1 && y1 == -1 && y2 == -1){flag = 0;break;}xx[++cnt] = x1;e[cnt] = Edge(x1, x2,y1,1);xx[++cnt] = x2;e[cnt] = Edge(x1,x2,y2,-1);}sort(xx+1,xx+1+cnt);sort(e+1,e+1+cnt,cmp);int len = unique(xx+1,xx+1+cnt)-(xx+1);build(1,1,len);double area = 0;for(int i = 1;i<cnt;i++){int l = lower_bound(xx+1,xx+1+len,e[i].l)-xx;int r = lower_bound(xx+1, xx+1+len,e[i].r)-xx-1;update(1,l,r,e[i].inout);area+= tr[1].len *(e[i+1].h-e[i].h);}printf("%.0f\n",area);}return 0;}

POJ 1389 Area of Simple Polygons(扫描线求面积)相关推荐

  1. POJ Area of Simple Polygons 扫描线

    这个题lba等神犇说可以不用离散化,但是我就是要用. 题干: DescriptionThere are N, 1 <= N <= 1,000 rectangles in the 2-D x ...

  2. POJ1151基本的扫描线求面积

    题意:      给定n个矩形的对角坐标,分别是左下和右上,浮点型,求矩形覆盖的面积. 思路:       基本的线段树扫描线求面积,没有坑点,不解释了,提示一点,有的题尤其是线段树扫描线的题需要离散 ...

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

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

  4. poj 1654 Area 多边形面积

    /* poj 1654 Area 多边形面积题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> # ...

  5. POJ 1265 Area(Pick定理)

    POJ 1265 Area(Pick定理) 根据pick定理来做 皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式该公式可以表示为 2S=2a+b−2 其中a表示多边形内部的点数,b表示多边形边 ...

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

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

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

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

  8. 两条线段求交点+叉积求面积 poj 1408

    题目链接:https://vjudge.net/problem/POJ-1408 题目是叫我们求出所有四边形里最大的那个的面积. 思路:因为这里只给了我们正方形四条边上的点,所以我们要先计算横竖线段两 ...

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

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

最新文章

  1. 原创整理:92份面试题,累计3625页,肝的太累了
  2. python processpoolexector 释放内存_关于python:如何在multiprocessing.queue中从Process中释放内存?...
  3. 洛谷P4768 [NOI2018]归程 [可持久化并查集,Dijkstra]
  4. MyListUtil.java list工具类
  5. Linux下高性能网络编程中的几个TCP/IP选项_SO_REUSEADDR、SO_RECVBUF、SO_SNDBUF、SO_KEEPALIVE、SO_LINGER、TCP_CORK、TCP_NODE
  6. maven 父maven_Maven神秘化
  7. 中使用swiper不能自动切换_液晶拼接墙显示系统中矩阵切换器使用的注意事项
  8. delphi 参数化sql
  9. spring boot test [ 2.0.6.RELEASE version ]
  10. mysql union limit_mysql中的union和order by、limit
  11. Android系统签名文件
  12. word文档怎么给数字加千分符_如何在word中设置数字的千位分隔符?两种方法轻松搞定...
  13. python流量分析_python 监控流量
  14. 如何用python获取沪深300历年成分股的行情数据
  15. 卫星追踪利器 OpenATS简介
  16. IcedTea6 1.9已通过HotSpot 17更新为OpenJDK6 b20
  17. 常见分布 的 数学期望以及方差公式
  18. 阿里巴巴国际站组合标题的小技巧
  19. 此实现不是windows平台fips验证的加密算法的一部分
  20. 怎么修改图片到规定的大小?怎么改变图片KB大小?

热门文章

  1. Win11自带微软浏览器无法翻译
  2. linux 光标切换快捷键,光标操作快捷键,光标快捷键
  3. LeetCode 413.等差数列的划分
  4. Sniffing_Spoofing Report
  5. 醉林疯的PTA 7-2 换硬币 (20分)
  6. Spyder 运行时kernels启动报错
  7. SBG Ellipse2最强替代型号推荐?AHRS INS/GNSS
  8. 自动适配跳转电脑PC端和手机WAP端
  9. c语言写抢QQ红包软件,Android实现QQ抢红包插件
  10. 董导微博rust视频_丝绸扣碎、阴阳 AJ1 纷纷登场,5 月球鞋发售又有「新惊喜」!...