CF1983F array-value

题目描述

你有一个非负整数数组 $a_1, a_2, \ldots, a_n$。 一个长度 $\ge 2$ 的子数组 $a[l, r] = [a_l, a_{l+1}, \ldots, a_r]$ 的值定义为 $\min(a_i \oplus a_j)$,其中 $l \le i < j \le r$,$\oplus$ 表示异或运算。 你需要找出所有长度不少于 $2$ 的子数组的值中第 $k$ 小的那个。

输入格式

输入的第一行为测试用例数 $t$($1 \le t \le 2 \cdot 10^4$)。 每个测试用例的第一行为两个整数 $n$ 和 $k$($2 \le n \le 10^5$,$1 \le k \le \frac{n\cdot(n-1)}{2}$)。 每个测试用例的第二行为 $n$ 个非负整数 $a_1, a_2, \ldots, a_n$($0 \le a_i \le 10^9$)——即数组本身。 保证所有测试用例中 $n$ 的总和不超过 $10^5$。

输出格式

输出所有长度不少于 $2$ 的子数组的值中第 $k$ 小的那个。

说明/提示

在第一个测试用例中,各子数组的最小异或对为: $[1,2]: 3$ $[2,3]: 1$ $[3,4]: 7$ $[4,5]: 1$ $[1,2,3]: 1$ $[2,3,4]: 1$ $[3,4,5]: 1$ $[1,2,3,4]: 1$ $[2,3,4,5]: 1$ $[1,2,3,4,5]: 1$ 排序后为:$1, 1, 1, 1, 1, 1, 1, 1, 3, 7$。因此,第二小的元素为 $1$。 由 ChatGPT 4.1 翻译