Pagini recente » Istoria paginii utilizator/8claudiac65100wr5 | Cod sursa (job #2139743) | Cod sursa (job #1717765) | Monitorul de evaluare | Cod sursa (job #1256987)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define NMAX 3000005
using namespace std;
ifstream f ("sdo.in");
ofstream g ("sdo.out");
unsigned long x[NMAX];
int part(unsigned long *v, int l, int r)
{
int piv = v[l + rand() % (r - l + 1)];
int i = l, j = r;
while (1)
{
while (v[i] < piv)
i++;
while (v[j] > piv)
j--;
if (i < j)
{
swap(v[i], v[j]);
}
else
return j;
}
return 0;
}
void statord(unsigned long *v, int l, int r, int k)
{
if (l == r)
return;
int poz = part(v, l, r);
if (poz >= k)
statord(v, l, poz, k);
else
statord(v, poz + 1, r, k);
}
int main()
{
srand(time(NULL));
int n, k;
f >> n >> k;
for (int i = 0; i < n; i++)
f >> x[i];
statord(x, 0, n - 1, k - 1);
g << x[k - 1];
return 0;
}