传送门1
传送门2
思路:
第一次写扫描线
感觉还是很资瓷的
仅此作为第一次系列的又一个新成员
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int T,n;
double b[205],cover[805];
int lazy[805];
struct node{double up,down,data;int tp;
}a[205];
bool cmp(node a,node b){return a.data<b.data;}
void update(int rt,int begin,int end,node x)
{if (x.up<=begin&&end<=x.down){lazy[rt]+=x.tp;if (lazy[rt]) cover[rt]=b[end+1]-b[begin];else if (begin<end) cover[rt]=cover[rt<<1]+cover[rt<<1|1];else cover[rt]=0;return;}int mid=begin+end>>1;if (mid>=x.up) update(rt<<1,begin,mid,x);if (mid<x.down) update(rt<<1|1,mid+1,end,x);if (lazy[rt]) cover[rt]=b[end+1]-b[begin];else cover[rt]=cover[rt<<1]+cover[rt<<1|1];
}
void work()
{double x,y,xx,yy;for (int i=1;i<=n;++i)scanf("%lf%lf%lf%lf",&x,&y,&xx,&yy),a[i*2-1]=(node){y,yy,x,1},a[i*2]=(node){y,yy,xx,-1},b[i*2-1]=y,b[i*2]=yy;sort(b+1,b+n*2+1);int cnt=unique(b+1,b+n*2+1)-(b+1);for (int i=1;i<=n;++i)a[i*2-1].up=a[i*2].up=lower_bound(b+1,b+cnt+1,a[i*2-1].up)-b,a[i*2-1].down=a[i*2].down=lower_bound(b+1,b+cnt+1,a[i*2-1].down)-b-1;sort(a+1,a+n*2+1,cmp);double t=-1,ans=0;for (int i=1;i<=n*2;++i){if (t!=-1) ans+=cover[1]*(a[i].data-t);t=a[i].data;update(1,1,cnt-1,a[i]);}printf("%.2lf\n",ans);
}
main()
{for (scanf("%d",&n);n;scanf("%d",&n)) work();
}

【codevs3044】矩形面积求并【POJ1151】Atlantis,第一次的扫描线相关推荐

  1. [codevs3044][POJ1151]矩形面积求并

    [codevs3044][POJ1151]矩形面积求并 试题描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行一个数n ...

  2. POJ 1151 Atlantis 矩形面积求交/线段树扫描线

    Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...

  3. [CODEVS 3044] 矩形面积求并

    描述 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) http://codevs.cn/problem/3044/ 分析 先贴个Matrix67的讲离散化的博客地址: http://www. ...

  4. 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)

    [题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of ...

  5. 多个矩形,求覆盖面积,周长,及交点

    问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后所得图形的面积/周长: 三个矩形如左图所示,而若要计算面积,看右图,用3个矩形各自的面积之和减去重复部分(红色和蓝色)的面积 人算很简单, ...

  6. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  7. HDU 1542:Atlantis(扫描线+线段树 矩形面积并)***

    题目链接 题意 给出n个矩形,求面积并. 思路 使用扫描线,我这里离散化y轴,按照x坐标从左往右扫过去.离散化后的y轴可以用线段树维护整个y上面的线段总长度,当碰到扫描线的时候,就可以统计面积.这里要 ...

  8. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积

    /* 编写一个程序,从键盘读入一个矩形 的两个边的值(整数),求矩形面积. */ #include<stdio.h> void main() {int length,wide,area;p ...

  9. c语言直方图最大矩形面积,利用枚举法求直方图中最大矩形面积的方法实例

    求直方图中的最大矩形面积: 例如给定直方图{2,3,1,2,4,2} 则直方图中最大矩形面积为x=(3,6),|x|=3,y=2,max面积=6 思考:利用枚举法 /*当前位置往前进行枚举法*/ pu ...

最新文章

  1. 抛弃Anchor box和NMS,目标检测新范式开源:Sparse R-CNN
  2. Linux中的文件描述符与打开文件之间的关系
  3. 生产订单新增按钮没权限
  4. 第一个 Windows 应用程序
  5. 设计模式读书笔记-----备忘录模式
  6. c语言的递归定义有两个要素,C语言-chap8function.ppt
  7. Security+ 学习笔记40 网络安全设备
  8. python连续小波变换_连续小波变换CWT(2)
  9. DPDK学习0 -- 学习步骤
  10. [转载]对于WebGrid第三方控件的使用
  11. 集合的相关概念(开闭、有界无界、内点边界点等)
  12. 觅风易语言智能辅助开发视频教程(高清带源码)
  13. 自动化缺陷检测系统---项目总览
  14. 发qq邮件被对方服务器拒绝,QQ被对方拉黑了。我发QQ邮件对对方能收到吗?
  15. Numpy常用快捷指令
  16. 创建手工凭证实现分录中原币=0本位币<>0的效果-FBB1
  17. tc流量控制原理和实现
  18. 绿之韵传销是空穴来风,一心一意为健康事业奋斗
  19. 百万英雄,芝士超人,冲顶大会等答题助手
  20. 学校计算机和网络安全情况,学校网络安全自查报告

热门文章

  1. 开发者如何学好 MongoDB
  2. 【华为云实战开发】12.如何在云端快速开展Swagger接口测试
  3. 百度鹰眼html打开,BMap:WEB 服务API
  4. Kotlin学习笔记19 阶段复习1
  5. Android笔记 杀死进程demo
  6. matlab中LMI工具箱函数feasp的用法
  7. (Python)Pandas reset_index()用法总结
  8. pycharm+anaconda编译器运行程序时一直显示“ImportError: DLL load failed: 找不到指定的模块”的解决办法
  9. Python官方文档学习心得(第五篇)
  10. WORD如何将多文档快速汇总到一份WORD文件里面?