結果

問題 No.945 YKC饅頭
ユーザー 👑 rin204
提出日時 2022-02-11 21:04:11
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 876 ms / 2,000 ms
コード長 1,539 bytes
コンパイル時間 219 ms
コンパイル使用メモリ 81,792 KB
実行使用メモリ 132,672 KB
最終ジャッジ日時 2024-06-27 16:16:44
合計ジャッジ時間 28,739 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 74
権限があれば一括ダウンロードができます

ソースコード

diff #

import heapq

class Heapq:
    def __init__(self, lst = [], reverse = False):
        if reverse:
            self.pm = -1
            self.hq = [-l for l in lst]
        else:
            self.pm = 1
            self.hq = lst.copy()
        heapq.heapify(self.hq)
        self.tot = sum(lst)
        self.rm = []
        self.length = len(lst)
            
    def push(self, x):
        self.length += 1
        heapq.heappush(self.hq, x * self.pm)
        self.tot += x
    
    def pop(self):
        self.length -= 1
        ret = heapq.heappop(self.hq)
        self.tot -= self.pm * ret
        self.delete()
        return self.pm * ret
    
    def top(self):
        return self.pm * self.hq[0]
    
    def remove(self, x): # 存在しないものを消そうとするとバグる
        self.length -= 1
        self.tot -= x
        heapq.heappush(self.rm, self.pm * x)
        self.delete()
            
    def delete(self):
        while self.rm and self.rm[0] == self.hq[0]:
            heapq.heappop(self.rm)
            heapq.heappop(self.hq)

n, m = map(int, input().split())
add = [[] for _ in range(n)]
rem = [[] for _ in range(n)]
T = [""] * m
for i in range(m):
    l, r, t = input().split()
    T[i] = t
    add[int(l) - 1].append(i)
    rem[int(r) - 1].append(i)
    
ans = {"Y":0, "K":0, "C":0}
hq = Heapq()
for i in range(n):
    for j in add[i]:
        hq.push(j)
    if hq.length > 0:
        t = T[hq.top()]
        ans[t] += 1
    for j in rem[i]:
        hq.remove(j)
print(ans["Y"], ans["K"], ans["C"])

0