Pagini recente » Cod sursa (job #2158466) | Cod sursa (job #2226466) | Cod sursa (job #2317469) | Cod sursa (job #247058) | Cod sursa (job #702128)
Cod sursa(job #702128)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxN 3000010
int V[maxN];
void solve (int left, int right, int K)
{
int piv = (rand() % (right - left + 1)) + left;
swap (V[piv], V[left]);
int X = V[left];
int st = left, dr = right;
while (st < dr)
{
for ( ; st < dr && V[dr] >= X; dr --);
V[st] = V[dr];
for ( ; st < dr && V[st] <= X; st ++);
V[dr] = V[st];
}
V[st] = X;
int pospiv = st;
int le = pospiv - left + 1;
if (le > K) solve (left, pospiv - 1, K);
else if (le < K) solve (pospiv + 1, right, K - le);
}
int main()
{
freopen ("sdo.in", "r", stdin);
freopen ("sdo.out", "w", stdout);
int N, K;
scanf ("%d %d", &N, &K);
for (int i = 1; i <= N; ++ i) scanf ("%d", &V[i]);
srand (time (0));
solve (1, N, K);
printf ("%d", V[K]);
return 0;
}