对于一些神秘题我们考虑先从简单情况入手。我们考虑两个数 x,y 怎么做。如果 x<<y 那么我们一定是先让 x 变大;如果 x<y<2x 那么考虑令 d=y-x,如果 d<k 那么通过一定的操作我们能够让两者相同,否则每次的差距只会越来越大,所以不操作最优。我们考虑将 x 扩展能够得到 [2x,2x+k],每次都是一段区间。如果区间能够包含 y 那么就没有贡献,否则我们肯定是找到 y 前面区间的右端点和后面区间的左端点进行选择最优。
对于多个数的情况考虑一个特殊的数,也就是序列最大值,假设叫 t。如果我们最后得到的序列 x 被操作了 q 次,那么其他数起码都要操作 q 次。证明考虑如果再条一步一定会离 t' 更近。所以我们可以让 t 固定,去考虑剩下的数。因为 t 固定了,所以我们肯定是让其他数尽量靠近它才更优。于是就变成了若干上面两个数的问题,只不过现在对于一个数我们有两种选择,要么选前面区间的右端点 lp_i,要么选后面区间的左端点 rp_i,最后要让选出的数极差最小。这个问题我们可以按 lp_i 排序,然后我们去考虑答案区间左端点的位置。假设是 lp_i,那么对于 i+1 到 n-1 的数我们选 lp 一定不劣,剩下的一定会选 rp,于是我们维护一个前缀 rp 最大值即可。