这道题目很像分治,如果将下标序列以为关键字排序,排序之后的逆序列就是答案
我们学过的有关分治的排序方法:快速排序和归并排序。这里使用快速排序
这里看官方解答就好了,写的挺清楚的

然后官方解答还给了一个非随机算法,具体来说,就是先从左到右询问每个位置,如果是<,就一直询问直到=;否则的话就询问下一个位置(在询问下一个位置之前,利用上一次=的位置将复原)。
这样的话,最后一次<的位置就是,因为当询问到的时候,无论为多少,都会<直到=,然后就会变成,之后都是>;由于每次都要复原,所以就能确定的位置;同理可以找出的位置
然后我们就可以将调整为,然后利用随机化算法类似的过程进行快速排序就好了(将小于的放左边,大于的放右边),此时递归次数就是确定的
update 2024.7.8
重新做这一题目,有了一些突破
首先一个很naive的想法就是对第一个数一直询问直到“=”,对后面的数也是如此,这样的话就可以知道每一个数与最开始的的差,于是就可以知道每一个数了(注意这个序列是一个排列);然而这样的询问级别是的,题目却想要我们询问线性或者log的级别,于是往线性考虑,每一个数只询问一遍,此时我们就要关注整体,整体里面找特殊,特殊元素就是最大的和最小的,我们不难发现上面找最小的过程,找到了之后其实已经可以知道所有数了,但是此时询问级别仍然是的,所以我们再往log的角度想,此时就可以想到分治,分治就要找到中间数,找到中间数就要先找到最大数,于是有了上面的做法
所以主要是看出来的提示,以及特殊数的寻找
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构