Pagini recente » Cod sursa (job #957088) | Cod sursa (job #760077) | Cod sursa (job #2876906) | Cod sursa (job #1558265) | Cod sursa (job #407303)
Cod sursa(job #407303)
#include <fstream>
#include <stdlib.h>
using namespace std;
const char * in = "sdo.in";
const char * out = "sdo.out";
const int NMAX = 3000005;
int N, K;
int A[NMAX];
int Get ( int st, int dr )
{
int i, j, pivot;
i = rand()%(dr-st+1) + st;
pivot = A[i];
i = st-1, j = dr+1;
while ( 1 )
{
do { j--; } while ( A[j] > pivot );
do { i++; } while ( A[i] < pivot );
if ( i < j )
{
A[i] ^= A[j];
A[j] ^= A[i];
A[i] ^= A[j];
}
else return j;
}
}
int Ret ( int p, int r, int i )
{
if ( p == r )
return A[p];
int q = Get ( p, r );
int k = q-p+1;
if ( i <= k )
return Ret ( p, q, i );
else
return Ret ( q+1,r,i-k );
}
int main ( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf ( "%d%d", &N, &K );
int i;
for ( i = 1; i <= N; scanf ( "%d", A+i++ ) );
srand ( time(NULL) );
printf ( "%d\n", Ret( 1, N, K ) );
return 0;
}