Pagini recente » Cod sursa (job #991669) | Cod sursa (job #1436945) | Cod sursa (job #832969) | Cod sursa (job #461298) | Cod sursa (job #1121175)
#include <cstdio>
using namespace std;
#define MaxN 3000050
int v[MaxN];
int getpivot( int lo, int hi )
{
int i, indexpivot = lo + ( hi - lo ) / 2;
int dummy = v[hi];
v[hi] = v[indexpivot];
v[indexpivot] = dummy;
indexpivot = lo;
for ( i = lo; i < hi; ++i )
{
if ( v[i] < v[hi] )
{
if ( i != indexpivot )
{
dummy = v[i];
v[i] = v[indexpivot];
v[indexpivot++] = dummy;
}
else
++indexpivot;
}
}
dummy = v[hi];
v[hi] = v[indexpivot];
v[indexpivot] = dummy;
return indexpivot;
}
int quickselect( int lo, int hi, int k )
{
if ( lo == hi )
return v[lo];
int sorted = getpivot( lo, hi );
int localsorted = sorted - lo + 1;
if ( localsorted == k )
return v[sorted];
if ( localsorted > k )
return quickselect( lo, sorted - 1, k );
else
return quickselect( sorted + 1, hi, k - localsorted );
}
int main()
{
freopen( "sdo.in", "r", stdin );
freopen( "sdo.out", "w", stdout );
int n, i, k;
scanf( "%d %d\n", &n, &k );
for ( i = 1; i <= n; ++i )
scanf( "%d ", &v[i] );
printf( "%d\n", quickselect( 1, n, k ) );
return 0;
}