fork download
//Believe in yourself ,( try and try and then try ), You can do it 
//You don't have to be great to start but you have to start to be great 
#include <iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<vector>
#include <utility>
#include <stack>
#include <set>
#include <map>
#include<queue>
#include<set>
// 2D vector vector<vector<int>>v(n,vector<int>(m));
// sort and reverse in vector sort(v.begin(), v.end(), greater<int>());
// str.erase(pos,len); erase in string
// a = s.substr(0, i)<<before i, b = s.substr(i)<<from i to end;
// cout << (v[0] == 1 ? "YES" : "NO") << endl;
// unsigned long long int
// priority_queue<ll, vector<ll>, greater<ll>> p;
using namespace std;
#define ll long long
#define all(c)  c.begin(),c.end()


ll gcd(ll a, ll b)
{
    while (b != 0)
    {
        ll a2 = a;
        a = b;        b = a2 % b;
    }
    return  a;
}

ll lcm(ll a, ll b)
{
    return a / gcd(a, b) * b;
}

void soso()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
}
int n, k; ll arr[200005];

bool can(ll mid)
{
    ll cnt = 0,cnt2=0,m=0,temp=mid; 
    for (int i = 0; i < n; i+=2)
    {
        if (mid >= arr[i])
        {
            mid--;  cnt++;
        }
    }
    for (int i = 1; i < n; i += 2)
    {
        if (temp >= arr[i])
        {
            temp--; cnt2++;
        }
    }
    m = max(cnt, cnt2);
    return (m >= k);
}
int main()
{
    soso();
    cin >> n >> k;
    for (int i = 0; i < n; i++)cin >> arr[i];
    sort(arr, arr + n);
    ll l = 1, r = 1e18, ans = -1;
    while (l <= r)
    {
        ll mid = (l + r) / 2;
        if (can(mid))
        {
            ans = mid; r = mid - 1;
        }
        else l = mid + 1;
    }
    cout << ans;
}
Success #stdin #stdout 0.01s 5300KB
stdin
Standard input is empty
stdout
1