結果

問題 No.945 YKC饅頭
ユーザー rin204
提出日時 2022-02-11 21:11:28
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 901 ms / 2,000 ms
コード長 1,773 bytes
コンパイル時間 189 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 133,968 KB
最終ジャッジ日時 2024-06-27 16:23:39
合計ジャッジ時間 28,229 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
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 __bool__(self):
        return self.length > 0
        
    def __len__(self):
        return self.length
    
    def __getitem__(self, i):
        if i == 0:
            return self.top()
        else:
            assert False
            
    
    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:
        t = T[hq[0]]
        ans[t] += 1
    for j in rem[i]:
        hq.remove(j)

print(ans["Y"], ans["K"], ans["C"])

0