Pagini recente » Cod sursa (job #756781) | Cod sursa (job #2857204) | Cod sursa (job #736283) | Cod sursa (job #2792529) | Cod sursa (job #1121111)
#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 );
if ( sorted == k )
return v[k];
if ( sorted > k )
return quickselect( lo, sorted - 1, k );
else
return quickselect( sorted + 1, hi, k - sorted + lo - 1 );
}
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;
}