Pagini recente » Cod sursa (job #502140) | Cod sursa (job #2874007) | Cod sursa (job #2573448) | Cod sursa (job #508800) | Cod sursa (job #2307953)
#include <fstream>
#include <time.h>
#include <random>
#include <algorithm>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
static const int NMAX = 3e6+5;
int n,k,v[NMAX];
void ReadInput()
{
fin >> n >> k;
for(int i =1 ;i <=n ;++i)
fin >> v[i];
}
int Part(int low, int high)
{
int random = rand() % (high - low + 1) + low;
swap(v[random], v[high]);
int pivot = v[high];
int i = low -1;
for(int j = low; j < high; ++j)
{
if(v[j] <= pivot)
{
i++;
swap(v[i],v[j]);
}
}
swap(v[i+1],v[high]);
return i+1;
}
void QuickSort(int low, int high)
{
if(low < high)
{
int pi = Part(low,high);
if(k < pi)
QuickSort(low, pi-1);
else if(k > pi)
QuickSort(pi+1,high);
}
}
int main()
{
srand(time(NULL));
ReadInput();
QuickSort(1,n);
fout << v[k];
return 0;
}