Pagini recente » Cod sursa (job #803077) | Istoria paginii runda/preoji_11-12_2 | Cod sursa (job #1823862) | Cod sursa (job #685334) | Cod sursa (job #1790012)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define DIM 30000
using namespace std;
FILE * fin = fopen("sdo.in","r");
FILE * fout = fopen("sdo.out","w");
int n, k, v[3000005];
char buffer[DIM];
int pos = 0;
void citeste( int &numar ){
numar = 0;
while( buffer[pos] < '0' || buffer[pos] > '9' ){
if( pos == DIM ){
pos = 0;
fread( buffer, 1, DIM, fin );
}
pos++;
}
while( buffer[pos] >= '0' && buffer[pos] <= '9' ){
numar = numar * 10 + (int)( buffer[pos] - '0' );
if( pos == DIM ){
pos = 0;
fread( buffer, 1, DIM, fin );
}
pos++;
}
return ;
}
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(){
fread( buffer, 1, DIM, fin );
citeste(n);
citeste(k);
for( int i = 1; i <= n; i++ ){
citeste(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;
}