๋ฌธ์
https://www.acmicpc.net/problem/21939
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x16๊ฐ - ์ด์ง ๊ฒ์ ํธ๋ฆฌ
์๊ณ ๋ฆฌ์ฆ: ์ด์ง ํ์ ํธ๋ฆฌ, ํด์๋ฅผ ์ฌ์ฉํ ์งํฉ๊ณผ ๋งต, ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์งํฉ๊ณผ ๋งต, ์ฐ์ ์์ ํ
ํ์ด
๋ช
๋ น์ด recommend x์์ ๊ฐ์ ์ ํํ๋ ๊ธฐ์ค์ 1) ๋์ด๋, 2) ๋ฌธ์ ๋ฒํธ ์์ด๋ค.x์ ๊ฐ์ ๋ฐ๋ผ ์ต๋/์ต์๊ฐ์ ์ ํํด์ผ ํ๋ฏ๋ก ์ต๋ํ/์ต์ํ์ ๊ฐ๊ฐ ๋ง๋ค์ด์ค๋ค.
์ต๋ํ์๋ (-๋์ด๋, -๋ฌธ์ ๋ฒํธ), ์ต์ํ์๋ (๋์ด๋, ๋ฌธ์ ๋ฒํธ)๋ฅผ ์ง์ด๋ฃ์ด ๋ด๋ฆผ์ฐจ์/์ค๋ฆ์ฐจ์ ํํ๋ก ๊ด๋ฆฌํ๋ค.
๋จ, ํ์์ ๊บผ๋ธ ๊ฐ์ด ์ด๋ฏธ solved ๋ ๋ฌธ์ ์ผ์๋ ์์ผ๋ฏ๋ก ๋์
๋๋ฆฌ๋ก ๋ฐ๋ก ์ฒดํฌํด์ผํ๋ค.
๋์
๋๋ฆฌ๋ ๋ฌธ์ ๋ฒํธ: ๋์ด๋ ํํ๋ก ๊ตฌ์ฑ, solved ๋ ๋ฌธ์ ์ผ๊ฒฝ์ฐ ๋์
๋๋ฆฌ์์ ์ ๊ฑฐํ๋ค.
๋ช ๋ น์ด๋ณ๋ก ์คํ๊ณผ์ ์ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. add
- ๋์
๋๋ฆฌ์
๋ฌธ์ ๋ฒํธ: ๋์ด๋์ ์ฅ - ์ต๋ํ์
(-๋์ด๋, -๋ฌธ์ ๋ฒํธ)์ถ๊ฐ - ์ต์ํ์
(๋์ด๋, ๋ฌธ์ ๋ฒํธ)์ถ๊ฐ
2. solved
๋ฌธ์ ๋ฒํธํค ๊ฐ์ ๋์ ๋๋ฆฌ์์ ์ ๊ฑฐ
3. recommend
- x๊ฐ 1์ผ๊ฒฝ์ฐ
- ์ต๋ํ์์ ๋์ด๋, ๋ฌธ์ ๋ฒํธ pop
get(-๋ฌธ์ ๋ฒํธ, 0)๊ณผ popํ ๋ฌธ์ ๋ฒํธ์ ๋์ด๋๊ฐ ์ผ์นํ ๋๊น์ง ๊ณ์ pop- ์ผ์นํ๋ค๋ฉด break, ์ถ๋ ฅ ํ ๋ค์ ํ์ ๋ฃ์ด์ค
- ์ผ์นํ์ง ์์๋ ๋ฌธ์ ๋ค์ ์ด๋ฏธ solved ๋ ๋ฌธ์ ์ด๋ฏ๋ก ๋ฃ์ด์ค ํ์ X
- x๊ฐ -1์ผ๊ฒฝ์ฐ
- ์ต์ํ์์ ๋์ด๋, ๋ฌธ์ ๋ฒํธ pop
get(๋ฌธ์ ๋ฒํธ, 0)๊ณผ popํ ๋ฌธ์ ๋ฒํธ์ ๋์ด๋๊ฐ ์ผ์นํ ๋๊น์ง ๊ณ์ pop- ์ผ์นํ๋ค๋ฉด break, ์ถ๋ ฅ ํ ๋ค์ ํ์ ๋ฃ์ด์ค
์ ์ฒด ์ฝ๋
# ๋ฐ๋ก ๋ชจ์์ง๐ https://www.acmicpc.net/board/view/123070
# ๋ฉ๋ชจ๋ฆฌ: 65952KB / ์๊ฐ: 244ms
from sys import stdin
from heapq import heappop, heappush
input = stdin.readline
N = int(input())
L, S = [], []
status = {}
for _ in range(N):
P, level = map(int, input().split())
status[P] = level
heappush(L, (-level, -P))
heappush(S, (level, P))
M = int(input())
for _ in range(M):
cmd, *x = input().rstrip().split()
if cmd == "add":
P, level = map(int, x)
status[P] = level
heappush(L, (-level, -P))
heappush(S, (level, P))
elif cmd == "recommend":
# heap์์ ๋นผ๋ธ (๊ฐ, ๋ฌธ์ )์ status[๋ฌธ์ ]๋ฅผ ๋น๊ตํ๋ค.
# status[๋ฌธ์ ]์ ๊ฐ๊ณผ heap์ ๊ฐ์ด ์ผ์นํ์ง ์๋๋ค๋ฉด ์ด๋ฏธ ํ์๋ ๋ฌธ์ ์ด๋ฏ๋ก ํ์ง ์์ ๋ฌธ์ ๋ฅผ ์ฐพ์๋๊น์ง pop
if x[0] == "1":
level, P = heappop(L)
while status.get(-P, 0) != -level:
level, P = heappop(L)
heappush(L, (level, P)) # ๋บ๋ ๋ฌธ์ ๋ค์ ๋ค์ ๋ฃ์ด์ค
print(-P)
else:
level, P = heappop(S)
while status.get(P, 0) != level:
level, P = heappop(S)
heappush(S, (level, P))
print(P)
else: # solved P ์ผ๋
del status[int(x[0])]