问题分析
给定长度为 n 的信号序列,需要对其中的恰好 k 个信号值进行调节,每个信号值最多被调节一次。调节方式有两种:放大(乘以 2)或衰减(除以 2 并向下取整)。未选中的信号值保持原值。目标是最小化操作后序列的极差(最大值与最小值之差)。
核心观察
由于每个数只能操作一次,并且操作只会改变单个值,最优策略一定是:选择序列中最小的一部分信号值进行放大,选择最大的一部分信号值进行衰减。
理由:对中间值进行操作无法有效缩小极差;放大最小值或衰减最大值能在不扩大另一侧的情况下压缩区间。
在一个数字信号处理系统中,你得到了一组长度为 n 的信号值 a1,a2,…,an。你可以使用一台调节器对其中恰好 k 个信号值进行调节,每个信号值最多被调节一次。调节方式有两种:放大(将当前值乘以 2)或衰减(将当前值除以 2,结果向下取整)。未被选择的信号值保持原样。你希望经过调节后,整个序列的最大值与最小值之差尽可能小。请你计算这个最小可能的极差值。
序列长度 n 不超过 105,选择的信号值个数 k 满足 1≤k≤n,每个信号值 ai 均为不超过 109 的正整数。
第一行包含两个整数 n 和 k,表示序列长度和需要操作的信号值个数。 第二行包含 n 个整数 a1,a2,…,an,表示初始信号值序列。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册