Pagini recente » Diferente pentru grigore-moisil-2008/11-12 intre reviziile 6 si 7 | Copii2 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #470891)
Cod sursa(job #470891)
#include <fstream>
#include <ctime>
#include <cstdlib>
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;
}
}
void Ret ( int p, int r, int i )
{
if ( p == r )
return;
int q = Get ( p, r );
int k = q-p+1;
if ( i <= k )
Ret ( p, q, i );
else
Ret ( q+1,r,i-k );
}
int main ( void )
{
srand ( time(NULL) );
ifstream fin ( in );
ofstream fout ( out );
fin >> N >> K;
int i;
for ( i = 1; i <= N; ++i )
fin >> A[i];
Ret( 1, N, K );
fout << A[K] << "\n";
fin.close();
fout.close();
return 0;
}