显示代码纯文本
#include <cstdio>
#include <cctype>
int read() {
int res = 0, f = 1;
char ch = getchar();
for (; !isdigit(ch); ch = getchar()) if (ch == '-') f = -1;
for (; isdigit(ch); ch = getchar()) res = (res << 3) + (res << 1) + (ch ^ 48);
return res * f;
}
#include <algorithm>
const int MAXN = 1e5 + 10;
int T;
int n, m;
int a[MAXN], b[MAXN];
bool check(int mid) {
int sum = 0;
for (int i = 1; i <= n; ++i) {
b[i] = a[i] >= mid;
sum += !b[i];
}
return b[m - 1] + b[m] + b[m + 1] >= 2 || sum <= 2;
}
int main() {
#ifdef LOCAL
freopen("!input.in", "r", stdin);
freopen("!output.out", "w", stdout);
#else
freopen("thupc_2025_pre_machine.in", "r", stdin);
freopen("thupc_2025_pre_machine.out", "w", stdout);
#endif
T = read();
while (T--) {
n = read(), m = read();
for (int i = 1; i <= n; ++i) a[i] = read();
if (n <= 3) {
printf("%d\n", *std::max_element(a + 1, a + n + 1));
continue;
}
b[0] = b[n + 1] = 0;
int l = 0, r = 1000000000, ans;
while (l <= r) {
int mid = l + ((r - l) >> 1);
if (check(mid)) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
printf("%d\n", ans);
}
return 0;
}