Pagini recente » Cod sursa (job #537192) | Cod sursa (job #2457586) | Cod sursa (job #1944010) | Cod sursa (job #1638462) | Cod sursa (job #2427554)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <random>
#include <chrono>
#include <cctype>
using namespace std;
#define buff_size 104576
char buff[buff_size];
int pos = 0;
inline void read(int &nr)
{
while(!isdigit(buff[pos]))
if(++pos == buff_size)
fread(buff, 1, buff_size, stdin), pos = 0;
nr = 0;
while(isdigit(buff[pos]))
{
nr = (nr << 1) + (nr << 3) + buff[pos] - 48;
if(++pos == buff_size)
fread(buff, 1, buff_size, stdin), pos = 0;
}
}
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);
read(n);
read(k);
for(int i = 1; i <= n; i++)
{
read(a[i]);
}
printf("%d\n", kthelement(1, n, k));
return 0;
}