aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

abc 137 D - Summer Vacation (python)

a <= 1の中で最も b が大きいもの、a <= 2の中で最も b が大きいもの、...を重複しないように heap で取り出していく。list から a <= i のものだけを全て取り出す動作を while list[-1][0] <= i:
として実装した。

import sys
input = sys.stdin.readline
n,m = map(int,input().split())
chk = []
for i in range(n):
  a,b =  map(int,input().split())
  if a <= m:
    chk.append((a,b))

from heapq import heappop, heappush
from operator import itemgetter
chk = sorted(chk,key=itemgetter(0),reverse=True)

q = []
ans = 0
for i in range(1, m + 1):
    while chk and chk[-1][0] <= i:
        a,b = chk.pop()
        heappush(q,-b)
    if q:
        ans -= heappop(q)
print(ans)