Pagini recente » Cod sursa (job #81598) | Cod sursa (job #2176212) | Cod sursa (job #1612955) | Cod sursa (job #1375109) | Cod sursa (job #1323087)
#include <fstream>
#include <algorithm>
#include <ctime>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
long long N;
long long k;
long long* v;
void SDO(long long* a, long long start, long long end, long long kth)
{
if (start >= end)
return;
long long i = start;
long long j = end;
long long pivot = a[rand() % (end - start + 1) + start];
while (i <= j)
{
while (a[i] < pivot)
++i;
while (a[j] > pivot)
--j;
if (i <= j)
swap (a[i++], a[j--]);
}
if (end - start == 1)
{
if (start == kth)
out << a[start];
else
out << a[end];
}
else
{
if (kth <= j)
SDO(a, start, j, kth);
else
SDO(a, i, end, kth);
}
}
int main()
{
in >> N >> k;
v = new long long[N + 1];
for (int i = 1; i <= N; ++i)
in >> v[i];
srand(time(NULL));
SDO(v, 1, N, k);
in.close();
out.close();
delete[] v;
return 0;
}