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