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一下就好了。