Buggy python submission (verdict: Time Limit Exceeded):
# -*- coding: utf-8 -*-

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# ただ、割引券は 10^5 枚ありえるようなので、
# 普通に並び替えて最大なものに割引券を適用する...というのを繰り返しても、
# タイムアウトになるだろう。
# うーん...
#
# 単に大きい順にソートして割引券を適用して、
# そのあとは挿入ソートを使って順繰りに割引券を適用するというのはどうだろうか
# やってみようか
A = list(map(int, input().split()))
A.sort(reverse=True)

# for i in range(M):
#     A[0] = A[0] / 2
#     A.sort(reverse=True)

for i in range(M):
    # 1. 先頭を半額にする
    # 2. 挿入ソートする
    A[0] = A[0] / 2

    if 1 < N:
        idx = 0
        for j in range(1, N):
            if A[j] < A[0]:
                idx = j
                break
        if idx == 0:  # A[0] より小さい値を探せなかったとき; 単に A[0] を最後尾に回す
            pass
            A = A[1:] + [A[0]]
        else:
            A = A[1:idx] + [A[0]] + A[idx:]

print(sum([int(x) for x in A]))


Fixed submission:
# -*- coding: utf-8 -*-
import heapq

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# プライオリティキューを使って最大のものから順次割引していけばよさそう
# Python のプライオリティキューは最小値しか取れないため、すべての値を (* -1) して考える (出力時にまた (* -1) して戻す)
A = [-x for x in map(int, input().split())]
heapq.heapify(A)


for i in range(M):
    # M 回割引券を適用する
    minimal = heapq.heappop(A)
    heapq.heappush(A, minimal / 2)

print(sum([int(x) for x in A]) * -1)

Buggy python submission (verdict: Time Limit Exceeded):
# -*- coding: utf-8 -*-

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# ただ、割引券は 10^5 枚ありえるようなので、
# 普通に並び替えて最大なものに割引券を適用する...というのを繰り返しても、
# タイムアウトになるだろう。
# うーん...
#
# 単に大きい順にソートして割引券を適用して、
# そのあとは挿入ソートを使って順繰りに割引券を適用するというのはどうだろうか
# やってみようか
A = list(map(int, input().split()))
A.sort(reverse=True)

# for i in range(M):
#     A[0] = A[0] / 2
#     A.sort(reverse=True)

for i in range(M):
    # 1. 先頭を半額にする
    # 2. 挿入ソートする
    A[0] = A[0] / 2

    if 1 < N:
        idx = 0
        for j in range(1, N):
            if A[j] < A[0]:
                idx = j
                break
        if idx == 0:  # A[0] より小さい値を探せなかったとき; 単に A[0] を最後尾に回す
            pass
            A = A[1:] + [A[0]]
        else:
            A = A[1:idx] + [A[0]] + A[idx:]

print(sum([int(x) for x in A]))


Fixed submission:
# -*- coding: utf-8 -*-
import heapq

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# プライオリティキューを使って最大のものから順次割引していけばよさそう
# Python のプライオリティキューは最小値しか取れないため、すべての値を (* -1) して考える (出力時にまた (* -1) して戻す)
A = [-x for x in map(int, input().split())]
heapq.heapify(A)


for i in range(M):
    # M 回割引券を適用する
    minimal = heapq.heappop(A)
    heapq.heappush(A, minimal / 2)

print(sum([int(x) for x in A]) * -1)

Buggy python submission (verdict: Time Limit Exceeded):
# -*- coding: utf-8 -*-

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# ただ、割引券は 10^5 枚ありえるようなので、
# 普通に並び替えて最大なものに割引券を適用する...というのを繰り返しても、
# タイムアウトになるだろう。
# うーん...
#
# 単に大きい順にソートして割引券を適用して、
# そのあとは挿入ソートを使って順繰りに割引券を適用するというのはどうだろうか
# やってみようか
A = list(map(int, input().split()))
A.sort(reverse=True)
# print(A)

for i in range(M):
    # 1. 先頭を半額にする
    # 2. 挿入ソートする (最初は手抜きでタイムアウトするか調べる)
    A[0] = A[0] / 2
    A.sort(reverse=True)

print(sum([int(x) for x in A]))


Fixed submission:
# -*- coding: utf-8 -*-
import heapq

# N: 買う品物の個数
# M: 持っている割引券の数
N, M = list(map(int, input().split()))

# X 円の品物を買う際に Y 枚の割引券を使った場合、その品物を (X/2^Y) 円(小数点以下切り捨て)で買うことができます。
# 最小で何円あれば全ての品物を買うことができるのか?

# アイディア
# 単に高い商品から順に割引券を使えればよい...
# プライオリティキューを使って最大のものから順次割引していけばよさそう
# Python のプライオリティキューは最小値しか取れないため、すべての値を (* -1) して考える (出力時にまた (* -1) して戻す)
A = [-x for x in map(int, input().split())]
heapq.heapify(A)


for i in range(M):
    # M 回割引券を適用する
    minimal = heapq.heappop(A)
    heapq.heappush(A, minimal / 2)

print(sum([int(x) for x in A]) * -1)