Pagini recente » Cod sursa (job #2978830) | Cod sursa (job #2675300) | Cod sursa (job #3159176) | Cod sursa (job #1630974) | Cod sursa (job #2637374)
#include <fstream>
#include <stdlib.h>
#include <time.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int n, k;
int v[3000001];
int Partition(int arr[], int left, int right)
{
srand(time(NULL));
int index = left + (rand() % (right - left + 1));
int pivot = arr[index];
swap(arr[(left + right) / 2], arr[index]);
int i = left - 1;
int j = right + 1;
while (true)
{
do
{
i++;
}while (arr[i] < pivot);
do
{
j--;
}while (arr[j] > pivot);
if (i >= j)
return j;
swap(arr[i], arr[j]);
}
}
void SDO(int arr[], int left, int right, int k)
{
if (left < right)
{
int pi = Partition(arr, left, right);
if (k <= pi)
SDO(arr, left, pi, k);
else
SDO(arr, pi + 1, right, k);
}
}
int main()
{
f >> n >> k;
for (int i=1; i<=n; i++)
f >> v[i];
SDO(v, 1, n, k);
g << v[k];
return 0;
}