问题描述
每一个建筑物用一个三元组表示(L, H, R), 表示左边界, 高度和右边界,轮廓线用X,Y,X,Y…这样的交替式表示,给N个建筑,求轮廓线。
总体思路
首先,要将建筑物离散成点或线,方便运算。将建筑物表示成(L,H),(R,H)两个坐标表示,这样原来方块形的建筑物就离散成两条竖线。将所有的竖线按x坐标大小排序。
接下来,将排好序的数组的元素依次插入大顶堆(y坐标为key),如果堆中有与其y坐标相同的元素,则删除该元素(表示该建筑物已结束),否则直接插入堆中。简而言之,关注堆顶元素的变化,只要堆顶元素变化了,就输出堆顶元素的xy值。注意:如果是删除操作导致堆顶元素变化,输出的值应该为当前x值(curr_x),如果删除后,堆为空,那么y应该输出(curr_x,0);
示意图
输入:
离散化:
过程描述: