题目背景
bh1234666 正在学习二分查找。
题目描述
众所周知二分查找的 mid 在计算时可以取 ⌊2l+r⌋ 或者 ⌈2l+r⌉,于是有选择困难症的 bh1234666 同学在自己的二分查找代码中加入了随机化,每次随机选取其中的一个作为 mid。
注意,选取不同的 mid 其他参数也会受到影响,请以代码为准。
现在 bh1234666 给你了二分查找使用的序列(保证为单调递增)以及他想要寻找的数(保证在序列内),他想知道在运气最好的情况下循环需要进行几次(即代码中 cnt 的可能的最终值的最小值)。
循环:
递归:
注:以上两代码完全等价。
在此对上述代码中的 w 的作用做进一步阐释。
例如对于区间 [0,7],有 8 个成员。虽然 mid 的取值会因为 w 的取值改变而改变,但是最终确定的区间一定是 [0,3] 或 [4,7],选手可以就上述代码自行模拟。
对于区间 [0,6],有 7 个成员。mid 的取值与 w 的取值无关,但是 l 和 r 的取值会受到 w 的影响,最终确定的区间可能是 [0,2],[3,6](w=1)或 [0,3],[4,6](w=0)。
输入格式
第一行给出一个整数 n 表示序列长度。
第二行给出单调递增的 n 个整数表示 bh1234666 的序列。
第三行一个整数 q 表示询问的次数。
接下来 q 行每行一个整数表示需要查询的数字。
输出格式
对于每个询问回答一个整数,表示最小的循环次数。
提示
样例 1 解释
找 4:
取 [1,5]。
取 [1,3]。
取 [3,3](退出循环)。
样例 2 解释
查询 10 的位置。
[1,13]⟶w=0[1,7]⟶w=0[5,7]⟶w=1[5,5]数据范围及约定
本题采用捆绑测试,共有 3 个 subtask,最终分数为所有 subtask 分数之和。
Task123Score253540特殊限制n≤20n=2k(k∈N)对于 100% 的数据,保证 1≤n≤220,1≤q≤100,1≤numi≤109。
本题有 extra sub。