CF2211F Learning Binary Search
题目描述
你踏入了你的第一门数据结构课程,正在学习二分查找。你听教授在讲为什么二分查找的时间复杂度是 $O(\log{n})$,但你想看看能否找到一个更好的界限。
给定一个大小为 $n$ 的有序数组 $a$ 和一个整数 $k$,定义 $f(a, k, l, r)$ 为以下代码的结果:
```
function f(a, k, l, r):
if a 不包含 k:
return 0
mid = floor((l+r) / 2)
if a[mid]==k:
return 1
else if a[mid]
输入格式
每组测试包含多组测试数据。第一行为测试用例数 $t$($1 \le t \le 10^4$)。接下来每组测试数据一行,包含两个整数 $n$ 和 $m$($3 \leq n, m \leq 10^6$)。
保证所有测试用例中 $n$ 之和不超过 $10^6$,$m$ 之和不超过 $10^6$。
输出格式
每组测试数据输出一行答案,对 $676\,767\,677$ 取模。
说明/提示
在第一个测试用例中,其中一个 good 数组 $a$ 是 $[2,2,3]$。此时,$f(a,1,1,n)=0$(因为 $1$ 不在 $a$ 中),$f(a,2,1,n)=1$,$f(a,3,1,n)=2$。因此,这个 good 数组的贡献是 $0+1+2=3$。
由 ChatGPT 5 翻译