出题人题解。
首先有一个转化是我们可以求出最终的集合 ,再倒过来进行交换操作得到初始的 。
然后考虑如果获得了一个数 之后,你可以把它和 交换。因为 是所有 pair 中更大值最小的,所以一定有 ,其中 是与 配对的数。
先不考虑 即 与 配对的情况,此时有 。
那么和 交换之前,配对情况显然是 ,交换之后配对情况变为 ,且有 ,则操作后返回的 一定为 。于是我们知道了,在这次操作前 是配对的,但是这并没有什么用,因为无法确保 之前没有动过,也无法确保以后不会动。
我们还要找到一个更大的数与 配对从而将它覆盖在底下来得到新的 ,选择 就可以了。于是交换 ,配对情况变为 (如果 则变为 ,但这并不重要),于是我们成功把 覆盖在了底下。而且因为 是全局最大值,只要 这两个数保持配对,那么它们就都不会成为 ,可以直接将这两个数删掉,变为一个 的子问题。
现在考虑 的情况。如果是这种情况,交换 实际上不会产生任何效果,可以通过返回的 是否变化来判断。然后我们只需要同样地交换 来覆盖住 即可。
最后 的时候一定会剩下一个 ,而另外一个数就是 ,共需要 次询问。但是这个 是我们能通过之前产生的 pair 推导得出的,所以就可以减少一次询问,做到 次询问。