結果
| 問題 |
No.2804 Fixer And Ratism
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-12 15:26:22 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,148 bytes |
| コンパイル時間 | 428 ms |
| コンパイル使用メモリ | 82,252 KB |
| 実行使用メモリ | 87,352 KB |
| 最終ジャッジ日時 | 2025-02-12 15:26:34 |
| 合計ジャッジ時間 | 10,749 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 WA * 1 |
| other | WA * 31 |
ソースコード
import bisect
from collections import defaultdict
n, q = map(int, input().split())
Sr = [] # ソート済みリスト(条件により移動される要素用)
Sn = [] # ソート済みリスト(初期状態の要素用)
D = defaultdict(int)
for _ in range(q):
A = input().split()
if A[0] == "1":
s = A[1]
r = int(A[2])
D[s] = r
# Sn に (r, s) をソート済みリストのまま追加
bisect.insort(Sn, (r, s))
elif A[0] == "2":
x = int(A[1])
n -= x
else: # クエリタイプ "3" と仮定
s = A[1]
x = int(A[2])
n += x
tup = (D[s], s)
# Sr に (r, s) をソート済みリストとして追加
bisect.insort(Sr, tup)
# Sn から tup を削除
i = bisect.bisect_left(Sn, tup)
if i < len(Sn) and Sn[i] == tup:
Sn.pop(i)
# Sn と Sr の合計要素数が n を超えている間、最小の要素を取り出す
while len(Sn) + len(Sr) > n:
if Sn:
r, s = Sn.pop(0)
print(s)
else:
r, s = Sr.pop(0)
print(s)