Pagini recente » Cod sursa (job #1647059) | Cod sursa (job #1942304) | Cod sursa (job #2742308) | Cod sursa (job #2910588) | Cod sursa (job #3326638)
#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];
if ( begin == end )
return v[begin];
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 ( k <= e )
return kThElm( v, begin, e, k );
return kThElm( v, e + 1, end, 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;
}