Pagini recente » Borderou de evaluare (job #1979877) | Borderou de evaluare (job #2914882) | Cod sursa (job #2231677) | Cod sursa (job #2094215) | Cod sursa (job #479509)
Cod sursa(job #479509)
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int arange(int *a, int n)
{
int st = 0;
int dr = n - 1;
bool dir = false;
while (st < dr)
{
if (a[st] > a[dr])
swap(a[st], a[dr]), dir = !dir;
if(dir)
++ st;
else
-- dr;
}
return st;
}
void order(int *a, int n, int k)
{
int j = rand() % n;
swap(a[0], a[j]);
j = arange(a, n);
if(j == k)
return;
if(j < k)
order(a + j, n - j, k - j);
else
order(a, j, k);
}
int main()
{
srand(time(NULL));
freopen("sdo.in", "r" ,stdin);
freopen("sdo.out", "w", stdout);
int k, n;
cin >> n >> k;
-- k;
int *a;
a = new int[n];
for(int i=0;i<n;++i)
cin >> a[i];
order(a, n, k);
cout << a[k];
delete a;
return 0;
}