思路分析
我们希望 尽可能快地让 a1 成为最大值。直觉上,每次应该从当前最大的 ai (i≥2)转移值到 a1,这样 a1 增长最快,其他元素尽快下降。
因此可以:
- 将 a2,…,an 放入一个最大堆(优先队列)。
- 每次取堆顶最大值 m(对应某个 aj)。
- 计算 x=⌊m/2⌋,执行转移操作。
- 将更新后的 aj 放回堆中(如果还大于 0)。
题目内容
给定正整数 n 和一个大小为 n 的数组。小种可以对这个数组执行若干次以下操作:选择一个下标 i 令 x=[2ai] (即向下取整),令a1=a1+x,ai=ai−x 。
小钟需要求出最少的操作次数使得 ai 成为数组中最大的元素,即对于任意的 i(2<=i<=n) 满足 ai<a1 。题目保证给定数据一定存在答案。
请你计算出最少的操作次数是多少。