結果
問題 |
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)