import sys
import heapq
T = int(sys.stdin.readline())
result = []
for i in range(T):
max_arr = []
min_arr = []
visit = [False] * 1_000_001
K = int(sys.stdin.readline())
count = 0
for i in range(K):
S, num = sys.stdin.readline().split()
if S == "I":
# 튜플의 첫번째로 인해 우선순위 바뀜
heapq.heappush(max_arr, (-int(num), i))
heapq.heappush(min_arr, (int(num), i))
# True == 아직 지워지지 않음
visit[i] = True
else:
if int(num) == -1:
# 상대힙에서 버린 것 처리
while min_arr and not visit[min_arr[0][1]]:
heapq.heappop(min_arr)
if min_arr:
visit[min_arr[0][1]] = False
heapq.heappop(min_arr)
elif int(num) == 1:
while max_arr and not visit[max_arr[0][1]]:
heapq.heappop(max_arr)
if max_arr:
visit[max_arr[0][1]] = False
heapq.heappop(max_arr)
# 만약 마지막 2번 돌린 연산이 max_arr만 했다면 min_arr 에서 갱신을 해줘야 하므로
while min_arr and not visit[min_arr[0][1]]:
heapq.heappop(min_arr)
while max_arr and not visit[max_arr[0][1]]:
heapq.heappop(max_arr)
if min_arr and max_arr:
print(-max_arr[0][0], min_arr[0][0])
else:
print('EMPTY')
처음 이해하는데 좀 걸렸는데
코드만 좀 길뿐이지 이해하는데 쉬웠다
'알고리즘' 카테고리의 다른 글
<백준> 11723번 파이썬 알고리즘[집합] (0) | 2021.11.03 |
---|---|
<백준> 11279번 파이썬 알고리즘 [최대 힙] (0) | 2021.11.02 |
<백준> 2630번 파이썬 알고리즘 [재귀함수] (0) | 2021.10.31 |
<백준> 1764번 파이썬 알고리즘 (0) | 2021.10.30 |
<백준> 1697번 파이썬 알고리즘 (0) | 2021.10.29 |