import heapq

def skyline(buildings):
    starts = {}
    for left, right, height in buildings:
        starts.setdefault(left, []).append((-height, right))
        starts.setdefault(right, [])
    heap = [(0, float('inf'))]
    output = []
    previous = 0
    for x in sorted(starts):
        for entry in starts[x]:
            heapq.heappush(heap, entry)
        while heap[0][1] <= x:
            heapq.heappop(heap)
        height = -heap[0][0]
        if height != previous:
            output.append([x, height])
            previous = height
    return output
