Pagini recente » Cod sursa (job #829830) | Cod sursa (job #798493) | Cod sursa (job #1654345) | Cod sursa (job #465406) | Cod sursa (job #3326631)
#include <stdio.h>
#include <ctype.h>
#define NMAX 3000000
int v[NMAX];
FILE *fin, *fout;
int rInt() {
int rez = 0, ch;
while ( !isdigit( ch = fgetc( fin ) ) );
do
rez = rez * 10 + ch - '0';
while ( isdigit( ch = fgetc( fin ) ) );
return rez;
}
static inline void swap( int *a, int *b ) {
int aux = *a;
*a = *b;
*b = aux;
}
int kThElm( int v[], int begin, int end, int k ) {
int b = begin - 1, e = end + 1, p = v[(begin + end) / 2];
while ( v[++b] < p );
while ( v[--e] > p );
while ( b < e ) {
swap( &v[b], &v[e] );
while ( v[++b] < p );
while ( v[--e] > p );
}
if ( e == k )
return v[e];
if ( e < k )
return kThElm( v, e + 1, end, k );
return kThElm( v, begin, e, k );
}
int main() {
int n, k, i;
fin = fopen( "sdo.in", "r" );
n = rInt(), k = rInt();
for ( i = 0; i < n; i++ )
v[i] = rInt();
fclose( fin );
fout = fopen( "sdo.out", "w" );
fprintf( fout, "%d\n", kThElm( v, 0, n - 1, k - 1 ) );
fclose( fout );
return 0;
}