Pagini recente » Cod sursa (job #2505987) | Cod sursa (job #2208561) | Cod sursa (job #45480) | Cod sursa (job #1447613) | Cod sursa (job #2617760)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define buffSize 1<<17
int v[3000000];
char buffer[buffSize];
int pozBuff = buffSize;
FILE *fin;
char getch() {
if ( pozBuff == buffSize ) {
pozBuff = 0;
fread( buffer, 1, buffSize, fin );
}
return buffer[ pozBuff++ ];
}
int scano() {
char ch = getch();
while ( isdigit( ch ) == 0 )
ch = getch();
int nr = 0;
while ( isdigit( ch ) != 0 ) {
nr = nr * 10 + ( ch - '0' );
ch = getch();
}
return nr;
}
int main() {
srand( time( NULL ) );
int n, k, i, j, start, stop, aux, pivot;
FILE *fout;
fin = fopen( "sdo.in", "r" );
fout = fopen( "sdo.out", "w" );
n = scano();
k = scano() - 1;
for ( i = 0; i < n; i++ ) {
v[i] = scano();
}
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;
}