Pagini recente » Cod sursa (job #1053999) | Cod sursa (job #2218276) | Cod sursa (job #2539234) | Cod sursa (job #2121158) | Cod sursa (job #1226587)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#define MAX_LENGTH 3000000
using namespace std;
long long v[MAX_LENGTH];
long long rselection(int k, int left, int right)
{
int i = left, j = right - 1, ok = 1;
long long pivot = rand() % (right - left) + left;
while(ok)
{
do
{
i++;
}while(v[i] < pivot);
do
{
j--;
}while(v[j] > pivot);
if(i < j)
swap(v[i], v[j]);
else
ok = 0;
}
if(j + 1 > k)
return rselection(k, left, j+1);
if(j + 1 < k)
return rselection(k-j-1, j+1, right);
return pivot;
}
int main()
{
int n, i, k;
srand(time(NULL));
fstream f("sdo.in", ios::in);
fstream g("sdo.out", ios::out);
f >> n >> k;
for(i = 0 ; i < n ; i++)
f >> v[i];
g << rselection(k, 0, n);
return 0;
}