728x90
https://www.acmicpc.net/problem/21939
두 개의 힙(최대힙, 최소힙)을 사용해서 최대값 최솟값을 같이 파악하고, 출력할때 힙에서 제거했던 값이면 빼내는 방법으로 진행한다.
한번 제거했다가 같은 문제번호가 난이도가 바뀌어서 추가하는 경우 따로 처리해줘야했는데 level이라는 딕셔너리를 사용해서 현재의 난이도를 추적할수 있도록 했다.(힙에 같은 문제로 이전 난이도를 가지고 있다면 제거할수 있도록)
import sys; input = sys.stdin.readline
from heapq import heappop, heappush
def main():
N = int(input())
min_h, max_h = [], []
level = {}
for _ in range(N):
P, L = map(int, input().split())
heappush(min_h, (L, P))
heappush(max_h, (-L, -P))
if not level.get(P):
level[P] = 0
level[P] = L
M = int(input())
for _ in range(M):
c, *args = input().split()
if c[0] == 'a':
P, L = map(int, args)
heappush(min_h, (L, P))
heappush(max_h, (-L, -P))
if not level.get(P):
level[P] = 0
level[P] = L
elif c[0] == 's':
P = int(args[0])
level[P] = 0
else: #if c == "recommend"
x = args[0]
if x == '1': # max level
while max_h and level[-max_h[0][1]] != -max_h[0][0]:
heappop(max_h)
print(-max_h[0][1])
else: # x == -1
while min_h and level[min_h[0][1]] != min_h[0][0]:
heappop(min_h)
print(min_h[0][1])
if __name__ == "__main__":
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 14502 연구소 python (0) | 2022.02.26 |
---|---|
[백준] 15664 N과 M(10) python (0) | 2022.02.24 |
[백준] 1197 최소 스패닝 트리 python (0) | 2022.02.22 |
[백준] 11655 ROT13 C,C++ (0) | 2022.02.21 |
[백준] 1890 점프 C/C++ (0) | 2022.02.20 |