P8487 「HGOI-1」Binary search Ex
题目背景
此题为 [div.2 B](https://www.luogu.com.cn/problem/P8481) 的 extra sub,并非完整的题,总分为 $25$ 分(进入主题库后满分为 $100$ 分)。
$\text{bh1234666}$ 正在学习[二分查找](https://baike.baidu.com/item/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/10628618?fr=aladdin)。
题目描述
众所周知二分查找的 $\text{mid}$ 在计算时可以取 $\lfloor\dfrac{l+r}{2}\rfloor$ 或者 $\lceil\dfrac{l+r}{2}\rceil$,于是有选择困难症的 $\text{bh1234666}$ 同学在自己的二分查找代码中加入了随机化,每次随机选取其中的一个作为 $\textit{mid}$。
现在 $\text{bh1234666}$ 告诉你了他要找的数在序列内的下标(从 $0$ 开始,可以理解为在一个 $0\sim n-1$ 的升序序列内查询询问的数),他想知道在运气最好的情况下循环需要进行几次(即代码中 $\textit{cnt}$ 的可能的最终值的最小值)。
循环:
```cpp
int find(int *num,int x,int len)
{
int l=0,r=len-1,mid,cnt=0,w;
while(l
输入格式
无
输出格式
无
说明/提示
### 样例 1 解释
还原后的输出:$3\ 3\ 3$。
找 $2$:
取 $[1,5]$。
取 $[1,3]$。
取 $[3,3]$(退出循环)。
### 样例 2 解释
还原后的输出:$3\ 4\ 3\ 3\ 4$。
#### 数据生成器
```cpp
#include
using namespace std;
#define ull unsigned long long
ull sd = 111111111111111111ull, sd2, k = 1;
ull qu, n, ans;//qu表示每次询问的位置。
inline ull get_q(int i)
{
sd = (sd2 ^ (sd2 >> 3)) + 998244353;
return ((sd2 = sd ^ (sd > n;
sd2 = n;
while((k q2;
init();
for(int i = 1; i > qu;
ans += get_ans(qu) * i;
}
for(int i = 1; i