Pagini recente » Cod sursa (job #1916224) | Cod sursa (job #2418121) | Cod sursa (job #2758374) | Cod sursa (job #1919425) | Cod sursa (job #1121235)
#include <cstdio>
#include <cstdlib>
using namespace std;
#define MaxN 3000050
int v[MaxN];
int getpivot( int lo, int hi )
{
int i, k = lo + ( rand() % ( hi - lo ) );
int pivot = v[k];
int dummy = v[hi];
v[hi] = v[k];
v[k] = dummy;
k = hi;
i = lo;
while ( i < k )
{
while ( v[i] < pivot )
++i;
while ( v[k] > pivot )
--k;
if ( i < k )
{
dummy = v[i];
v[i] = v[k];
v[k] = dummy;
}
else
break;
}
return k;
}
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()
{
srand( 71123233 );
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;
}