結果
問題 | No.2804 Fixer And Ratism |
ユーザー |
👑 |
提出日時 | 2024-07-12 21:17:09 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 157 ms / 2,000 ms |
コード長 | 2,470 bytes |
コンパイル時間 | 180 ms |
コンパイル使用メモリ | 82,512 KB |
実行使用メモリ | 76,792 KB |
最終ジャッジ日時 | 2024-07-12 21:17:20 |
合計ジャッジ時間 | 5,516 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
ソースコード
import heapqclass DeletableHeapq:def __init__(self, lst=None, reverse=False):if reverse:self.pm = -1else:self.pm = 1if lst is None:self.hq = []else:self.hq = [self.pm * x for x in lst]heapq.heapify(self.hq)self.tot = sum(self.hq) * self.pmself.cnt = {}for x in self.hq:self.cnt[x] = self.cnt.get(x, 0) + 1self.length = len(self.hq)def __bool__(self):return bool(self.hq)def __len__(self):return self.length@propertydef sum(self):return self.totdef top(self):if self.hq:return self.hq[0] * self.pmelse:return Nonedef __getitem__(self, i):# 先頭要素にアクセスしたいときのみassert i == 0return self.top()def push(self, x):self.length += 1self.cnt[x * self.pm] = self.cnt.get(x * self.pm, 0) + 1self.tot += xheapq.heappush(self.hq, x * self.pm)def pop(self):if not self.hq:return Noneself.length -= 1x = heapq.heappop(self.hq)self.cnt[x] -= 1self.tot -= x * self.pmself._delete()return x * self.pmdef remove(self, x):if self.cnt.get(x * self.pm, 0) == 0:return Falseself.length -= 1self.cnt[x * self.pm] -= 1self.tot -= xself._delete()return Truedef _delete(self):while self.hq and self.cnt.get(self.hq[0], 0) == 0:heapq.heappop(self.hq)n, Q = map(int, input().split())hq1 = DeletableHeapq()hq2 = DeletableHeapq()S = [""] * 4001tf = [False] * 10000dic = {}for _ in range(Q):query = input().split()if query[0] == "1":s, r = query[1:]r = int(r)S[r] = sdic[s] = rhq1.push(r)tf[r] = Trueelif query[0] == "2":x = int(query[1])n -= xelse:s, x = query[1:]x = int(x)n += xr = dic[s]if tf[r]:tf[r] = Falsehq1.remove(r)hq2.push(r)ans = []while n < len(hq1) + len(hq2):if hq1:r = hq1.pop()ans.append(r)else:r = hq2.pop()ans.append(r)ans.sort()for r in ans:print(S[r])