Pagini recente » Cod sursa (job #3231670) | Cod sursa (job #92705) | Clasamentul arhivei educationale | Cod sursa (job #623605) | Cod sursa (job #2518186)
#include <stdio.h>
#include <stdlib.h>
int v[3000000];
int main() {
FILE *fin = fopen( "sdo.in", "r" );
FILE *fout = fopen( "sdo.out", "w" );
int n, k, i, st, dr, pivotVal, b, e, aux;
fscanf( fin, "%d%d", &n, &k );
--k;
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &v[i] );
}
st = 0;
dr = n - 1;
while ( dr > st ) {
pivotVal = v[(dr + st) / 2];
b = st;
e = dr;
while ( b < e ) {
while ( v[b] < pivotVal ) {
++b;
}
while ( v[e] > pivotVal ) {
--e;
}
if ( b < e ) {
aux = v[b];
v[b] = v[e];
v[e] = aux;
++b;
--e;
}
}
if ( k <= e ) {
dr = e;
} else {
st = e + 1;
}
}
fprintf( fout, "%d", v[k] );
fclose( fin );
fclose( fout );
return 0;
}