Pagini recente » Cod sursa (job #2621179) | Cod sursa (job #3282394) | Cod sursa (job #2415262) | Cod sursa (job #2047992) | Cod sursa (job #2617754)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
int v[3000000];
int main() {
srand( time( NULL ) );
int n, k, i, j, start, stop, aux, pivot;
FILE *fin, *fout;
fin = fopen( "sdo.in", "r" );
fout = fopen( "sdo.out", "w" );
assert( fscanf( fin, "%d%d", &n, &k ) == 2 );
k--;
for ( i = 0; i < n; i++ ) {
assert( fscanf( fin, "%d", &v[ i ] ) == 1 );
}
fclose( fin );
start = 0;
stop = n - 1;
while ( start < stop ) {
i = start;
j = stop;
pivot = v[ ( rand() % ( stop - start + 1 ) ) + start ];
while ( i <= j ) {
while ( v[ i ] < pivot )
i++;
while ( v[ j ] > pivot )
j--;
if ( i <= j ) {
aux = v[ i ];
v[ i ] = v[ j ];
v[ j ] = aux;
i++;
j--;
}
}
if ( k <= j )
stop = j;
else if ( k >= i )
start = i;
else
start = stop = k;
}
fprintf( fout, "%d\n", v[ k ] );
fclose( fout );
return 0;
}