Pagini recente » Cod sursa (job #2119048) | Cod sursa (job #2760296) | Cod sursa (job #1926210) | Cod sursa (job #731272) | Cod sursa (job #3124585)
#include <fstream>
#include <algorithm>
#include <cassert>
#include <queue>
#include <cstdlib>
#define ll long long
using namespace std;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
const int NMAX = 3e6;
int n, k;
int a[NMAX + 1];
int QuickSelect(int left, int right)
{
int pivot_index = rand() % (right - left + 1) + left;
int pivot = a[pivot_index];
int index = left;
// cout << pivot << '\n';
for(int i = left; i <= right; i++)
if(i != pivot_index && a[i] < pivot)
{
swap(a[index], a[i]);
if(index == pivot_index)
pivot_index = i;
index++;
}
swap(a[index], a[pivot_index]);
// for(int i = 1; i <= n; i++)
// cout << a[i] << ' ';
// cout << '\n';
// cout << index << '\n';
if(index < k)
return QuickSelect(index + 1, right);
if(index > k)
return QuickSelect(left, index - 1);
return a[index];
}
int main()
{
srand(time(NULL));
cin >> n >> k;
for(int i = 1; i <= n; i++)
cin >> a[i];
cout << QuickSelect(1, n);
return 0;
}