Pagini recente » Cod sursa (job #1353707) | Cod sursa (job #384618) | Cod sursa (job #2828041) | Cod sursa (job #2686580) | Cod sursa (job #2746249)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int v[3000005];
int result = -1;
void quicksort(int lf, int rg, int pos)
{
if(lf >= rg || result != -1)
{
return;
}
if(lf + 1 == rg)
{
if(v[lf] > v[rg])
swap(v[lf], v[rg]);
return;
}
int piv = rand() %(rg - lf + 1) + lf;
swap(v[piv], v[rg]);
int free_pos = lf;
for(int i = lf; i < rg; i++)
{
if(v[i] <= v[rg])
{
swap(v[free_pos], v[i]);
free_pos++;
}
}
swap(v[rg], v[free_pos]);
if(pos == free_pos)
result = v[free_pos];
if(pos < free_pos)
quicksort(lf, free_pos - 1, pos);
if(pos > free_pos)
quicksort(free_pos + 1, rg, pos);
}
int main()
{
int n, k;
fin >> n >> k;
for (int i = 0; i < n; i++)
{
fin >> v[i];
}
srand(time(0));
quicksort(0, n - 1, k - 1);
if (result == -1)
{
fout << v[k - 1];
}
else
{
fout << result;
}
return 0;
}