Pagini recente » Cod sursa (job #3221668) | Cod sursa (job #59331) | Cod sursa (job #780070) | Cod sursa (job #1380079) | Cod sursa (job #1114484)
#include <stdio.h>
#define n_MAX 3000000
int v[ n_MAX + 1 ];
int qselect( int beg, int end, int k ) {
if( end - beg > 1 ) {
int piv = v[ ( beg * 3 + end * 5 ) / 8 ];
int l = beg - 1, r = end;
while( l < r ) {
while( v[ ++ l ] < piv );
while( v[ -- r ] > piv );
if( l < r ) {
int aux = v[ l ];
v[ l ] = v[ r ];
v[ r ] = aux;
}
}
if( k < l ) {
return qselect( beg, l, k );
} else {
return qselect( l, end, k );
}
} else {
return v[ beg ];
}
}
int main( ) {
FILE * fin, * fout;
fin = fopen( "sdo.in", "r" );
fout = fopen( "sdo.out", "w" );
int n, k;
fscanf( fin, "%d%d", &n, &k );
int i;
for( i = 1; i <= n; i ++ ) {
fscanf( fin, "%d", v + i );
}
fprintf( fout, "%d\n", qselect( 1, n + 1, k ) );
fclose( fin );
fclose( fout );
}