Pagini recente » Cod sursa (job #620400) | Cod sursa (job #2740799) | Cod sursa (job #951209) | Cod sursa (job #2875965) | Cod sursa (job #2183456)
#include<cstdio>
#include<algorithm>
#include<ctime>
#include<stdlib.h>
using namespace std;
FILE * fin = fopen( "sdo.in", "r" );
FILE * fout= fopen( "sdo.out", "w" );
int pos, N, V[(1<<22)], K;
const int Sz = (1<<20);
char buffer[Sz];
inline void citeste( int &numar ){
numar = 0;
while( buffer[pos] < '0' || buffer[pos] > '9' ){
pos++;
if( pos == Sz )
pos = 0, fread( buffer, 1, Sz, fin );
}
while( buffer[pos] >= '0' && buffer[pos] <= '9' ){
numar = numar * 10 + ( buffer[pos] - '0' );
pos++;
if( pos == Sz )
pos = 0, fread( buffer, 1, Sz, fin );
}
return;
}
int poz( int st, int dr, int k ){
if( st <= dr ){
int ds = 0, dd = -1, aux, L = st, R = dr;
while( L < R ){
if( V[L] > V[R] ){
swap( V[L], V[R] );
aux = ds;
ds = -dd;
dd = -aux;
}
L += ds;
R += dd;
}
if( L == k )
return V[L];
else
if( k < L )
return poz( st, L - 1, k );
else
return poz( L + 1, dr, k );
}
}
int main(){
citeste( N );
citeste( K );
for( int i = 1; i <= N; i++ )
citeste( V[i] );
srand( time(0) );
for( int i = N; i >= 2; i-- ){
int P = ( (int)( 1 + rand() % i ) * (int)( 1 + rand() % i ) ) % i;
swap( V[P], V[i] );
}
fprintf( fout, "%d\n", poz( 1, N, K ) );
return 0;
}