(HDU 1542) Atlantis 矩形面积并——扫描线

n个矩形,可以重叠,求面积并。

n<=100:

  暴力模拟扫描线。模拟赛大水题。(n^2)

  甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形。

  甚至这个题就可以这么做。

n<=100000

  这就要到扫描线了。

之前一直不会。

不好处理的地方在于:不知道区间被覆盖怎么计算。。。。

像sum区间和一样计算??sum>区间长度也不一定完全包含。。。

不管覆盖多少次,就只算一次??之后的减法怎么算??

总之,

这篇题解打消了我的疑惑:ACM POJ1151 (HDU 1542) Atlantis(矩形面积并,线段树+离散化+扫描线)

其实很简单。

线段树每个区间有一个c值,表示这个区间被完全覆盖次数。

类似李超线段树,我们把每个加入的线段分成logn份,恰好放进每个区间才行。

这个区间的c值,就加1,表示被完全覆盖一次。

计算这个区间的实际覆盖贡献cnt时,如果c>0 显然就是区间长度了。

如果不是,那就是两个儿子区间的贡献cnt和。

总结:

线段树区间被线段覆盖问题,确实因为不完全覆盖统计很麻烦,又不可做。

所以,干脆就把线段拆解,记录每个区间被完全覆盖次数。这个完全覆盖次数,就不用pushup了。

需要的时候,每次查询大不了logn^2一下就好了。

原文地址:https://www.cnblogs.com/Miracevin/p/9373138.html