传送门

•参考资料

  [1]:算法总结:【线段树+扫描线】&矩形覆盖求面积/周长问题(HDU 1542/HDU 1828)

•题意

  给你 n 个矩形,求矩形并的周长;

•题解1(两次扫描线)

  周长可以分成两部分计算,横线和竖线;
  如何求解横线的所有并的长度呢?
  和求矩阵面积并的做法一样,先将 x 离散化;
  每次更新的时候,记录一下上次更新后的横线总长度;
  ans += [现在这次总区间被覆盖的长度和上一次总区间被覆盖的长度之差的绝对值];
  求解竖线的所有并的长度何求解横线的长度相同;
  需要注意的是,在求解矩形面积并的时候,排序策略是按照 h 从小到大排序,并不需要考虑 h 相同的情况;
  但是求矩形周长并的时候就不行了,必须得考虑 h 相同的情况下的排序策略;
  以下例求解横线并的长度为例;
    n=2
    (2,1),(4,3)
    (3,3),(4,5)
  定义如下数据结构存储横线;

 struct Edge
{
int l,r;
int h;
int f;
bool operator < (const Edge &obj)const
{
return h < obj.h;
}
}e[maxn<<];

  假设与处理矩形面积并的排序策略相同,只考虑按 h 升序排列,那么排列后的数据为:
    $e_{1}:\{l=2\ ,\ r=4\ ,\ h=1\ ,\ f=1 \}$
    $e_{2}:\{l=2\ ,\ r=4\ ,\ h=3\ ,\ f=-1 \}$
    $e_{3}:\{l=3\ ,\ r=4\ ,\ h=3\ ,\ f=1 \}$
    $e_{1}:\{l=3\ ,\ r=4\ ,\ h=5\ ,\ f=-1 \}$
  让我们手动模拟一下这个求解过程;
  定义 ans 表示答案,len 表示当前更新后的横线并的总长度,pre 表示上一次更新后的 len 值;
  初始化 ans=0,len=0,pre=0;
  首先处理 $e_{1}$,update() 后,len = 2;
  更新 ans += |len-pre| = 2 , pre=len=2;
  处理 $e_{2}$,update() 后,len = 0;
  此时,更新 ans += |len-pre| = 2+2 = 4 , pre=len=0,出现问题了是吧,因为来到此处的时候,ans=3才对;
  继续向上更新, $e_{3}$,update() 后,len=1;
  更新 ans += |len-pre| = 4+1 = 5 , pre=len=1;
  $e_{4}$,update() 后,len=0;
  更新 ans += |len-pre| = 5+1 = 6;
  但是正确答案应该是 ans = 4;
  多的 2 就是因为排序策略不当而产生的;
  所以,当 h 相同的时候,应该先处理 f = 1 的边,即如果可以先加入边,那就优先执行加边操作;
  所以,需要将 Edge 中的排序策略更改一下,改成如下模式:

 bool operator < (const Edge &obj)const
{
if(h != obj.h)
return h < obj.h;
return f > obj.f;
}

  (ps:f = 1 表示下边界,所以当 h 相同时,按照 f 降序排列)
  到这,这道题就这么愉快的解决了;

•Code

  HDU1828.cpp

HDU 1828“Picture”(线段树+扫描线求矩形周长并)的更多相关文章

  1. HDU 1828 Picture (线段树+扫描线)(周长并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1828 给你n个矩形,让你求出总的周长. 类似面积并,面积并是扫描一次,周长并是扫描了两次,x轴一次,y ...

  2. poj 1177 --- Picture(线段树+扫描线 求矩形并的周长)

    题目链接 Description A number of rectangular posters, photographs and other pictures of the same shape a ...

  3. HDU 1828 Picture (线段树:扫描线周长)

    依然是扫描线,只不过是求所有矩形覆盖之后形成的图形的周长. 容易发现,扫描线中的某一条横边对答案的贡献. 其实就是 加上/去掉这条边之前的答案 和 加上/去掉这条边之后的答案 之差的绝对值 然后横着竖 ...

  4. hdu 1542(线段树+扫描线 求矩形相交面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. poj 1177 Picture (线段树 扫描线 离散化 矩形周长并)

    题目链接 题意:给出n个矩形,每个矩形给左下 和 右上的坐标,求围成的周长的长度. 分析: 首先感谢大神的博客,最近做题经常看大神的博客:http://www.cnblogs.com/kuangbin ...

  6. hdu1542 线段树扫描线求矩形面积的并

    题意:       给你n个正方形,求出他们的所占面积有多大,重叠的部分只能算一次. 思路:       自己的第一道线段树扫描线题目,至于扫描线,最近会写一个总结,现在就不直接在这里写了,说下我的方 ...

  7. POJ 1177/HDU 1828 picture 线段树+离散化+扫描线 轮廓周长计算

    求n个图矩形放下来,有的重合有些重合一部分有些没重合,求最后总的不规则图型的轮廓长度. 我的做法是对x进行一遍扫描线,再对y做一遍同样的扫描线,相加即可.因为最后的轮廓必定是由不重合的线段长度组成的, ...

  8. HDU 1542"Atlantis"(线段树+扫描线求矩形面积并)

    传送门 •题意 给你 n 矩形,每个矩形给出你 $(x_1,y_1),(x_2,y_2)$ 分别表示这个矩形的左下角和右上角坐标: 让你求这 n 个矩形并的面积: 其中 $x \leq 10^{5} ...

  9. hdu 1828 Picture(线段树 || 普通hash标记)

    http://acm.hdu.edu.cn/showproblem.php?pid=1828 Picture Time Limit: 6000/2000 MS (Java/Others)    Mem ...

随机推荐

  1. java 4对象群体的组织

    两个接口 collecion接口 元素构成的元素的群体 map接口 键值对组成的群体 Array类 Vector ArrayList 在数组上构建的类 Java集合框架介绍 集成过得数据结构 查询方法 ...

  2. 2018-5-22-SublimeText-粘贴图片保存到本地

    title author date CreateTime categories SublimeText 粘贴图片保存到本地 lindexi 2018-05-22 15:15:26 +0800 2018 ...

  3. oracle-Oradim

    输入以下命令之一: 通过指定以下选项创建实例: -NEW -SID sid | -SRVC srvc | -ASMSID sid | -ASMSRVC srvc [-SYSPWD pass] [-ST ...

  4. NOIP模拟 17.8.16

    NOIP模拟17.8.16 A 债务文件名 输入文件 输出文件 时间限制 空间限制debt.pas/c/cpp debt.in debt.out 1s 128MB[题目描述]小 G 有一群好朋友,他们 ...

  5. Sublime Text3安装教程,配置教程,常用插件安装等方法

    前言: sublimeText3的特点: 1.Sublime Text 是一款跨平台代码编辑器,在Linux.OS X和Windows下均可使用. 2.Sublime Text 是可扩展的,并包含大量 ...

  6. BZOJ2802Warehouse Store题解

    链接 我太菜了,连贪心题都不会写... 贪心思路很简单,我们能满足顾客就满足他,如果满足不了,就看之前的顾客中 有没有需求比该顾客多的顾客,如果有的话改为卖给这位顾客会使解更优 所以我们用一个优先队列 ...

  7. NS2学习笔记

    这两天在调一个仿真程序,比较奇怪的错误,就是一个节点广播消息,在它通信半径内的节点收不到消息,一直在通信上找问题,找了半天也没找到. 最后,用gdb调试,发现在一个操作指针处发生了段错误,引起的原因时 ...

  8. s3c6410时钟初始化

        今天自己写bootloader做时钟初始化时遇到的问题,特记录下来.为了方便理解,我大部分都有截图, 在此我先说明下,图均来自数据手冊.也希望看了本篇文章的同志多多參看数据手冊才干理解的更加透 ...

  9. AtCoder Beginner Contest 075 C bridge【图论求桥】

    AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...

  10. Hbase数据模型物理视图