Pagini recente » Cod sursa (job #1996334) | Cod sursa (job #3162640) | Cod sursa (job #214475) | Cod sursa (job #1998454) | Cod sursa (job #1034430)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define swapp(a, b) a = a ^ b ^ (b = a)
#define nmax 3000005
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int N, v[nmax], K;
int part( int v[nmax], int st, int dr )
{
int i = st - 1;
int j = dr + 1;
int p = v[st + ( rand()%(dr-st+1) ) ];
while (1)
{
do
{
++i;
} while ( v[i] < p );
do
{
--j;
} while ( p < v[j] );
if ( i < j )
{
int aux = v[i];
v[i] = v[j];
v[j] = aux;
}
else
return j;
}
return 0;
}
void sel( int st, int dr, int k )
{
if ( st == dr )
return;
int q = part( v, st, dr );
int t = q - st + 1;
if ( t >= k )
sel(st, q, k);
else
sel(q+1, dr, k-t);
}
int main()
{
in >> N >> K;
for ( int i=1; i<=N; i++ )
in >> v[i];
sel(1, N, K);
out << v[K];
}