https://codeforces.com/problemset/problem/1370/D
作者:
hongye
,
2025-04-17 12:14:29
· 辽宁
,
所有人可见
,
阅读 4
https:
#include <iostream>
using namespace std;
const int N = 200020;
int val[N];
int n , m , max_a , k;
bool check(int mid){
int cnt = 1;
for(int i=1;i<=n;i++){
if(cnt%2 == 1 && val[i]<=mid){
cnt++;
}else if(cnt%2==0){
cnt++;
}
}
if(cnt >= k+1) return true;
cnt = 1;
for(int i=1;i<=n;i++){
if(cnt%2==0 && val[i]<=mid){
cnt++;
}else if(cnt%2==1){
cnt++;
}
}
return cnt >= k+1;
}
int find(){
int l = 1 , r = max_a , mid , ans=0;
while(l <= r){
mid = (l+r)/2;
if(check(mid)){
ans = mid;
r = mid-1;
}else{
l = mid+1;
}
}
return ans;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>val[i];
max_a = max(val[i],max_a);
}
cout<<find();
return 0;
}