import sys
import heapq#最小堆,存入相反数当最大堆,这样不用每次都排序
n,k=map(int,sys.stdin.readline().split())
a=list(map(int,sys.stdin.readline().split()))
total_time=sum(a)
save_time=0
heap=[]
#从后向前遍历
for i in range(n-1,-1,-1):
#每隔k轮有一个道具,找到此时最大堆中的堆顶,用总共时间减去堆顶,即为节省的时间
if (i+1)%k==0 and heap:
save_time+=heapq.heappop(heap)#存负数
#其他情况,将当前节点放入堆中
heapq.heappush(heap,-a[i])
print(total_time+save_time)

京公网安备 11010502036488号