Pagini recente » Cod sursa (job #2625855) | Cod sursa (job #871896) | Cod sursa (job #1658451) | Cod sursa (job #929694) | Cod sursa (job #2183453)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int n, k, p, aux;
int arr[3000005];
bool gasit = false;
int poz( int st, int dr )
{
int d_st = 0, d_dr = -1;
while( st != dr )
{
if( arr[st] > arr[dr] )
{
swap( arr[st], arr[dr] );
aux = d_st;
d_st = -d_dr;
d_dr = -aux;
}
st += d_st;
dr += d_dr;
}
return st;
}
void cauta( int st, int dr, int t )
{
if( st < dr && !gasit )
{
p = poz( st, dr );
if( p > k )
cauta( st, p - 1, t );
else if( p < k )
cauta( p + 1, dr, t - p );
else
{
out<<p;
gasit = true;
}
}
}
int main()
{
in>>n>>k;
for( int i = 1; i <= n; i++ )
in>>arr[i];
srand( time(0) );
for( int i = n; i >= 2; i-- )
swap( arr[i], arr[ 1 + rand()%(i-1) ] );
cauta( 1, n, k );
out<<arr[k];
return 0;
}