import sys
input = sys.stdin.readline
heap = ['']
n = int(input())
for i in range(n) :
e = int(input())
if e == 0 :
if heap == [''] :
print(0)
else :
e = heap[-1]
heap[1], heap[-1] = heap[-1], heap[1]
print(heap[-1])
del heap[-1]
index = 1
while index * 2 < len(heap) :
a = index * 2
if len(heap) == index * 2 + 1 :
next = a
else :
b = a + 1
if heap[a] <= heap[b] :
next = a
else :
next = b
if e > heap[next] :
heap[index], heap[next] = heap[next], heap[index]
index = next
else :
break
else :
heap.append(e)
index = len(heap) - 1
while index > 1 :
if e < heap[index//2] :
heap[index], heap[index//2] = heap[index//2], heap[index]
index = index // 2
else :
break
|
11279 최대 힙의 코드(https://uneducatedjungler.tistory.com/40)와 부호만 다르다.
11287 절댓값 힙을 풀기 위해 먼저 풀어보았다.
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2696 중앙값 구하기 (0) | 2021.11.17 |
---|---|
파이썬 백준 11286 절댓값 힙 (0) | 2021.11.17 |
파이썬 백준 14003 가장 긴 증가하는 부분 수열 5 (0) | 2021.11.17 |
파이썬 백준 14002 가장 긴 증가하는 부분 수열 4 (0) | 2021.11.17 |
파이썬 백준 12738 가장 긴 증가하는 부분 수열 3 (0) | 2021.11.17 |