Pagini recente » Cod sursa (job #1331464) | Cod sursa (job #662263) | Cod sursa (job #1625791) | Cod sursa (job #2765337) | Cod sursa (job #658890)
Cod sursa(job #658890)
#include <cstdio>
using namespace std;
const int MAX_N = 3000002;
const char infile[] = "sdo.in";
const char outfile[] = "sdo.out";
int a[ MAX_N ];
int N, K;
void read(){
FILE *f;
f = fopen( infile, "rt" );
fscanf( f, "%d %d", &N, &K );
for( int i = 1; i <= N; ++i )
fscanf( f, "%d", &a[ i ] );
}
void swap( int i, int j ){
int aux = a[ i ];
a[ i ] = a[ j ];
a[ j ] = aux;
}
int partition( int left, int right ){
int i = left - 1, j = right + 1, val = a[ left ], sw = 1;
while( sw ){
do
i++;
while( a[ i ] < val );
do
j--;
while( a[ j ] > val );
if( i < j )
swap( i, j );
else
return j;
}
}
void quick( int left, int right, int k ){
if( left == right )
return;
int div = partition( left, right), t = div - left + 1;
if( t >= k )
quick( left, div, k );
else
quick( div + 1, right, k - t );
}
void write(){
FILE *g;
g = fopen( outfile, "wt" );
fprintf( g, "%d\n", a[ K ] );
}
int main(){
read();
quick( 1, N, K );
write();
return 0;
}