Pagini recente » Cod sursa (job #1735181) | Cod sursa (job #2011558) | Cod sursa (job #2145474) | Cod sursa (job #2437668) | Cod sursa (job #2424619)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <random>
#include <chrono>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N = 3000000 + 7;
int n, k, a[N];
int kthelement(int l, int r, int k)
{
if(l == r)
{
return a[l];
}
int pivot = a[rng() % (r - l + 1) + l];
int i = l;
for(int j = l; j <= r; j++)
{
if(a[j] <= pivot)
{
swap(a[j], a[i]);
i++;
}
}
i--;
if(k <= i - l + 1)
{
return kthelement(l, i, k);
}
else
{
return kthelement(i + 1, r, k - (i - l + 1));
}
}
int main()
{
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
printf("%d\n", kthelement(1, n, k));
return 0;
}