๋ฌธ์
https://www.acmicpc.net/problem/7662
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x16๊ฐ - ์ด์ง ๊ฒ์ ํธ๋ฆฌ
์๊ณ ๋ฆฌ์ฆ: ์ฐ์ ์์ ํ
ํ์ด
๋จ์ํ๊ฒ ์ต๋ํ, ์ต์ํ์ผ๋ก๋ง ๊ด๋ฆฌํ๋ค๊ฐ ํ๋ ธ๋ ๋ฌธ์ ๋ค.
์ต๋ํ์์ ์ถ์ถํ๋ ์ซ์๊ฐ ์ต์ํ์์๋ ์์ง ์กด์ฌํ ์๋ ์์ผ๋ฏ๋ก, ๊ฐ ์ซ์์ ์ํ(๊ฐฏ์)๋ฅผ ๋ฐ๋ก ์ ์ฅํด๋ฌ์ผํ๋ค.
- ์ ๋ ฅ์ด I๋ก ์ฃผ์ด์ง๊ฒฝ์ฐ ํด๋น ์ซ์์ ๊ฐฏ์๋ฅผ +1 ์นด์ดํธ.
- D์ผ๊ฒฝ์ฐ ๋ช
๋ น์ด์ ๋ง์ถฐ ์ต๋/์ต์ํ์์ ์ซ์๋ฅผ ์ถ์ถ.
- ๋ง์ฝ ์ถ์ถํ ์ซ์์ ๊ฐฏ์๊ฐ 0์ธ ์ํ๋ผ๋ฉด ์ด๋ฏธ ์ ์ฒด ํ์์ ์ ๊ฑฐ๋ ์ํ์ด๋ฏ๋ก, ๊ฐฏ์๊ฐ 0์ด ์๋ ์ซ์๋ฅผ ์ฐพ์๋๊น์ง ๊ณ์ ์ถ์ถํ๋ค.
- ์ฐพ์ผ๋ฉด 1 ๊ฐ์์ํจ ํ ํด๋น ์ซ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๋ชจ๋ ๊ณผ์ ์ด ๋๋๊ณ ๋์ ํ์ ๊ธธ์ด๊ฐ 0์ด๋ผ๋ฉด "EMPTY"๋ฅผ, ๋จ์์๋ค๋ฉด ์ต๋๊ฐ, ์ต์๊ฐ์ ์ถ์ถํ๋ค.
์ด๋๋ ์ซ์์ ๊ฐฏ์๋ฅผ ๊ฐ์์ํค์ง ์๋๋ค.
ํ์ ๊ธธ์ด๊ฐ 1์ผ๋์ ์ต๋๊ฐ, ์ต์๊ฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ D ์ฐ์ฐ(์ถ์ถ)์ ํ์ด ๋น์ด์์๋๋ ๋ค์ด์ฌ ์ ์๋ค.
๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๋ฐ ๋๋ length
๋ก ํ์ ๊ธธ์ด๋ฅผ ๋ฐ๋ก ์ ์ฅํด๋๋ค.
I์ผ๊ฒฝ์ฐ length += 1
, D์ผ๊ฒฝ์ฐ ์ต๋/์ต์๋ฅผ ๋ง๋ก ํ๊ณ length -= 1
์ ์คํํ๋ค.
์
๋ ฅ์ด D์ผ๋ length = 0
์ด๋ผ๋ฉด ๊ทธ๋๋ก ๋์ด๊ฐ์ฃผ๋ฉด ๋๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 181816KB / ์๊ฐ: 3860ms
from sys import stdin
from heapq import heappush, heappop
input = stdin.readline
def solution():
k = int(input())
L, S = [], [] # L: ์ต๋ํ, S: ์ต์ํ
length = 0
status = {} # ์ซ์๋ค์ ์ํ(๊ฐฏ์)๋ฅผ ์ ์ฅํ ๋์
๋๋ฆฌ
for _ in range(k):
cmd, num = input().rstrip().split()
num = int(num)
if cmd == "I":
heappush(L, -num)
heappush(S, num)
length += 1
status[num] = status.get(num, 0) + 1
else:
if length <= 0:
continue
if num == 1:
# ๋ง์ฝ ์ซ์์ ๊ฐฏ์๊ฐ 0์ด๋ผ๋ฉด ์ด๋ฏธ ํ์์ ์ถ์ถํ๋ค๋ ๋ป์ด๋ฏ๋ก,
# ์์ง ์ถ์ถ๋์ง ์์ ์ซ์๋ฅผ ์ฐพ์๋๊น์ง pop
while True:
n = -heappop(L)
if status[n] > 0:
status[n] -= 1
break
else:
while True:
n = heappop(S)
if status[n] > 0:
status[n] -= 1
break
length -= 1
# ๊ธธ์ด๊ฐ 0์ด๋ผ๋ฉด "EMPTY" ๋ฐํ
if length <= 0:
return "EMPTY"
# ์๋๋ผ๋ฉด 0์ด ์๋ ์ซ์ ์ค ์ต๋, ์ต์๊ฐ ๋ฐํ
while True:
_max = -heappop(L)
if status[_max] > 0:
break
while True:
_min = heappop(S)
if status[_min] > 0:
break
return f"{_max} {_min}"
for _ in range(int(input())):
print(solution())