学习笔记 | 最小堆、“种草”

在这里插入图片描述
在这里插入图片描述



def HeadAdjust(nums, k, n):
    nums[0] = nums[k]
    i = 2*k
    while i <= n:
        if i < n and nums[i] > nums[i+1]:
            i += 1
        if nums[0] <= nums[i]:
            break
        else:
            nums[k] = nums[i]
            k = i
        i = i*2
    nums[k] = nums[0]


def minHead(nums, n, x):
    for i in range(n//2, -1, -1):
        HeadAdjust(nums, i, n)


if __name__ == '__main__':
    nums = input().split()
    nums = [int(it) for it in nums]
    n = nums[0]
    m = nums[1]
    x = nums[2]

    xc = input().split()
    xc = [int(it) for it in xc]
    xc.insert(0, 0)

    minHead(xc, n, x)
    for _ in range(m):
        xc[1] += x
        HeadAdjust(xc, 1, n)

    print(xc[1])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值