#3843. 兔猫信奥学院的“隐形长度”搜索-暂不用
兔猫信奥学院的“隐形长度”搜索-暂不用
🐰🐱 题目描述
兔猫信奥学院的神秘藏宝洞中,藏着一条按严格升序排列的宝石序列 secret
,但小兔和小猫只能通过时空窥探装置 ArrayReader 访问第 i
号宝石的编号:
- 调用
ArrayReader.get(i)
返回secret[i]
; - 如果
i
超出了真实长度,则返回一个大数(视为 “无穷大”)。
加菲老师对他们说:
“你不知道序列的长度,只能借助
ArrayReader.get(i)
。给定一个目标编号target
,如果在序列中存在,返回它的下标;否则返回 –1。必须在平均或最坏 \(O(\log n)\) 的时间内完成!”
小兔想到:“先用指数探测快速找到一个上界 high
,再在 [low,high]
上做二分!”
小猫点头:“没错,完美符合 \(O(\log n)\)!”
📥 输入格式
为了在信息学奥赛中模拟这个过程,实际输入我们这样设计:
第一行:整数 n, target
第二行:n 个整数 secret[0..n-1],严格升序
- \(1 \le n \le 10^4\)
secret
严格递增
注意:虽然输入给了 n
,在解题时你不得直接使用它,必须通过模拟的 ArrayReader.get(i)
来访问元素或检测越界。
📤 输出格式
一个整数:目标 target 在序列中的下标(0~n-1),若不存在则输出 -1
💡 输入输出样例
样例 1
6 9
-1 0 3 5 9 12
4
调用
get(4)
可以获得 9。
样例 2
6 2
-1 0 3 5 9 12
-1
序列中无 2。
📊 数据范围
- 隐藏长度 \(n\le10^4\),调用
ArrayReader.get
总次数需 。 - 元素与
target
在区间 。