题意

注意,所有的 都不会重复

稍微提高点难度吧,询问次数限制改为

题解

首先有一个一定能找到相对高地的方法(此处取名“蛇形法”,至于为什么,往下看就知道了):
随机一个点,寻问四周,向最高的点移动,直到四周都比它低。

<此处应有 秒思考,你需要知道它为什么是对的,又需要知道它在什么情况下会超出询问次数>

查看答案 ![](https://rbtr.ee/usr/uploads/2024/02/3579691183.png)

考虑一下这个 是怎么出来的。大概就是个分治。于是每次把 的大矩阵切成四个 的小矩阵。我们的任务是通过几次询问操作来确定那个 小矩阵一定有相对高地

首先,显然想到的是询问一个“十”字框:

然后找到框上最大的一个点,看它剩下的两个方向(有两个方向在框上,已经确定比它低了)的高度,如果都比它低,此点既是相对高地。否则,高的一边所在的 小矩阵一定有相对高地(此时回想一下之前那个“蛇形法”,你应该就能理解这个为什么是对的了)。

现在告诉你,目前为止是对的,但如果继续用这个方法找答案就不对了。

<此处应有较长时间的思考,你需要知道它为什么第二次走的时候就有可能出错了,这是此题的关键之一>

查看答案 想出来了?没想出来建议你再想一想。
展开答案 ![](https://rbtr.ee/usr/uploads/2024/02/4267600494.png) 越红代表越高。请模拟一边算法流程,如果你不懂,建议停下思考或重新阅读本文。

<此处应有 秒思考,你需要想想如何解决这个问题>

解决方法 询问“田”字而不是“十”字。

询问复杂度分析

第一次只需要询问一个“十”字,复杂度为

下一次:询问一个“田”字,其中有一半会在第一次寻问的“十”字上,于是只有中心十字的 和外层“田”字的一半 需要询问。

第三次:“田”字已经在前两次操作时都询问完了,因此只有中心十字的 需要询问。

之后每次的询问次数都是上次的次数除以二,因此总询问次数为:

稍微卡卡常即可。

做法

我们需要从本质上考虑“十”字法为什么会错。

<此处应有 秒思考>

就是因为上次找到的相对高地的线被跟丢了。因此只要把上次“十”字考虑进来就行了,不需要任何额外询问。