如图:
用一个水平线从下往上进行扫描,遇到a线段(cover=1),将其插入线段树中,线段树中的每个节点都有个cover值,初始都为0,因此第一条线段插入时不会覆盖其它线段(显然的)。接着是b线段(cover=1)插入线段树,与a线段产生覆盖的区间是第一次计算的面积,覆盖的区间相当于矩形长,再利用线段树中存的矩形纵坐标,可得到矩形宽,然后就能算出面积。
接着是c线段插入线段树(cover=-1),与前面的a和b线段的产生覆盖的区间,此时可以得到第二次计算的面积
.......
另外,我这里是从下往上进行扫描,故此只对横坐标就行离散化就行了。
还有一件事,平时我用的线段树,叶子节点其实存的已经不是线段,而是一个点了(或者说是数组的下标),但是此题还这样的话会出现问题,如图:
因此需要让线段树的叶子节点存成单位长度,如图: