Pagini recente » Cod sursa (job #685389) | Istoria paginii runda/simulare_oji_bv_11-12 | Cod sursa (job #697393) | Cod sursa (job #2765959) | Cod sursa (job #1790000)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
FILE * fin = fopen("sdo.in","r");
FILE * fout = fopen("sdo.out","w");
int n, k, v[3000005];
int poz( int st, int dr ){
int i = 0;
int j = -1;
while( st < dr ){
if( v[st] > v[dr] ){
swap( v[st], v[dr] );
int aux = i;
i = -j;
j = -aux;
}
st += i;
dr += j;
}
return st;
}
int sdo( int st, int dr ){
if( st < dr ){
int p = poz( st, dr );
if( p == k ){
return p;
}else{
if( k < p ){
sdo( st, p );
}else{
sdo( p + 1, dr );
}
}
}
}
int main(){
fscanf( fin, "%d%d", &n, &k );
for( int i = 1; i <= n; i++ ){
fscanf( fin, "%d", &v[i] );
}
srand( time(0) );
for( int i = 2; i <= n; i++ ){
int p = rand() % (i - 1) + 1;
swap( v[p], v[1] );
}
int p = sdo( 1, n );
fprintf( fout, "%d", v[p] );
return 0;
}