Pagini recente » Cod sursa (job #1588534) | Cod sursa (job #1413703) | Cod sursa (job #1404372) | Cod sursa (job #2538337) | Cod sursa (job #1733362)
#include <stdio.h>
#include <algorithm>
#include <cstdlib>
#include <random>
#define MAXN 3000001
std::random_device rd;
std::mt19937 rng(rd());
FILE *inputFile = fopen("sdo.in", "r"), *outputFile = fopen("sdo.out", "w");
int numbers[MAXN];
int n, k, i, nr;
int partition(int first, int last)
{
int k = first - 1, i, pivot = numbers[last];
for(i = first; i < last; i++)
if(numbers[i] <= pivot)
{
k++;
std::swap(numbers[i], numbers[k]);
}
std::swap(numbers[last], numbers[k + 1]);
return k + 1;
}
int randomized_partition(int first, int last)
{
std::uniform_int_distribution<int> uni(first,last);
int random = uni(rng);
std::swap(numbers[last], numbers[random]);
return partition(first, last);
}
void quicksort(int first, int last)
{
if(first < last)
{
int q = randomized_partition(first,last);
quicksort(first, q - 1);
quicksort(q + 1, last);
}
}
int main()
{
fscanf(inputFile, "%d %d", &n ,&k);
for(i = 0; i < n; i++)
fscanf(inputFile, "%d", numbers + i);
quicksort(0, n - 1);
fprintf(outputFile, "%d", numbers[k - 1]);
return 0;
}