結果

問題 No.2804 Fixer And Ratism
ユーザー D M
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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)
0