Pagini recente » Cod sursa (job #1734593) | Cod sursa (job #1333543) | Cod sursa (job #843583) | Cod sursa (job #2402433) | Cod sursa (job #2670835)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
using namespace std;
const int NMAX = 3e6;
int v[NMAX];
int nth_elem ( int n, int k, int v[] ) {
int start = 0, end = n - 1, ipiv, i, j, pivot, aux;
while ( start < end ) {
ipiv = start + rand() % ( end - start );
pivot = v[ipiv];
i = start;
while ( v[i] < pivot )
i++;
j = end;
while ( v[j] > pivot )
j--;
while ( i < j ) {
aux = v[i];
v[i] = v[j];
v[j] = aux;
do i++; while( v[i] < pivot);
do j--; while( v[j] > pivot);
}
if ( k <= j )
end = j;
else
start = j + 1;
}
return v[start];
}
FILE *fin;
int get() {
int nr = 0, ch;
while ( ! isdigit ( ch = fgetc(fin) ) );
do {
nr = nr * 10 + ch - '0';
} while ( isdigit ( ch = fgetc(fin) ) );
return nr;
}
int main() {
FILE * fout;
int n, k, i;
fin = fopen ( "sdo.in", "r" );
n = get(); k = get();
for ( i = 0; i < n; i++ )
v[i] = get();
fclose ( fin );
fout = fopen ( "sdo.out", "w" );
srand ( time ( NULL ) );
fprintf( fout, "%d", nth_elem ( n, k - 1, v ));
fclose ( fout );
return 0;
}