Pagini recente » Cod sursa (job #384934) | Cod sursa (job #1958924) | Cod sursa (job #2743378) | Cod sursa (job #900447) | Cod sursa (job #2625021)
#include <fstream>
#include <random>
#include <ctime>
using namespace std;
ifstream f("sdo.in");
ofstream g ("sdo.out");
int n, k, low[3000005], eql[3000005], high[3000005];
int quick_select(int n, int k, int v[])
{
int pivot = rand()%n;
int x = v[pivot];
int len_l=0,len_e=0, len_h=0;
for(int i=0; i<n; i++)
{
if(v[i] < x)
{
low[len_l] = v[i];
len_l++;
}
else if(v[i] == x)
{
eql[len_e] = v[i];
len_e++;
}
else
{
high[len_h] = v[i];
len_h++;
}
}
if (k <= len_l)
quick_select(len_l, k, low);
else
if (k <= len_l+len_e)
return eql[0];
else
{
k = k-(len_l+len_e);
quick_select(len_h, k, high);
}
}
int main()
{
f >> n >> k;
for(int i=0; i<n; i++)
f >> high[i];
int val = quick_select(n, k, high);
g<<val;
}