Pagini recente » Cod sursa (job #1568819) | Cod sursa (job #812552) | Cod sursa (job #2419641) | Cod sursa (job #1226632)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#define MAX_LENGTH 3000000
using namespace std;
long long v[MAX_LENGTH];
int n;
void print()
{
int i;
for(i = 0 ; i < n ; i++)
cout << v[i] << " ";
}
long long rselection(int k, int left, int right)
{
int i, j, pos;
if(left < right - 1)
{
pos = rand() % (right - left) + left;
swap(v[pos], v[left]);
for(i = left, j = left + 1 ; j < right ; j++)
if(v[j] < v[left])
{
swap(v[i+1], v[j]);
i++;
}
swap(v[left], v[i]);
if(i > left + k-1)
return rselection(k, left, i);
if(i < left + k-1)
return rselection(k-i-1+left, i+1, right);
return v[i];
}
return v[left];
}
int main()
{
int 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;
}