Pagini recente » Cod sursa (job #284235) | Cod sursa (job #83390) | Cod sursa (job #186957) | Cod sursa (job #1609854) | Cod sursa (job #1242937)
#include <fstream>
#include <cstdlib>
using namespace std;
#define fileIn "sdo.in"
#define fileOut "sdo.out"
#define maxN 3000100
int v[maxN];
int random( int lo, int hi )
{
return rand() % ( hi - lo + 1 ) + lo;
}
int getPivot( int lo, int hi )
{
int t;
int index = random( lo, hi );
int pivot;
t = v[index];
v[index] = v[hi];
v[hi] = t;
pivot = t;
index = lo;
for ( int i = lo; i < hi; ++i )
{
if ( v[i] < pivot )
{
if ( i != index )
{
t = v[i];
v[i] = v[index];
v[index++] = t;
}
else
++index;
}
}
v[hi] = v[index];
v[index] = pivot;
return index;
}
int quickSelect( int lo, int hi, int k )
{
int sorted = getPivot( lo, hi );
int localSorted = sorted - lo + 1;
if ( k < localSorted )
return quickSelect( lo, sorted - 1, k );
if ( k > localSorted )
return quickSelect( sorted + 1, hi, k - localSorted );
return v[sorted];
}
int main()
{
srand( 1233 * 11 / 6 + 123 );
ifstream sIn( fileIn );
ofstream sOut( fileOut );
int n, k, i;
sIn >> n >> k;
for ( i = 0; i <= n; ++i )
sIn >> v[i];
sOut << quickSelect( 1, n, k ) << '\n';
return 0;
}