ABC141D priority heap

priority heapを使うと、最大値の取得がlogNで可能に。
ランダムな値の挿入もlogNで可能。

import sys
import heapq
stdin = sys.stdin

n,m = map(int, stdin.readline().split())

# heap は通常、最小値がrootのヒープを作成する。最大値を取得するために、マイナス各値にマイナスをかける。
an = [i*(-1) for i in map(int, stdin.readline().split())]
#print(an)

# リストのheap化
heapq.heapify(an)

# heapから最大値を取り出して、半分にしてヒープに戻すことをm回。
for _ in range(m):
    b = heapq.heappop(an)
    heapq.heappush(an, (-1)*((-1)*b//2))

ans = (-1)*sum(an)
print(ans)