Pagini recente » Cod sursa (job #2560822) | Cod sursa (job #556715) | Borderou de evaluare (job #174966) | Cod sursa (job #2507137) | Cod sursa (job #2609690)
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
long long int k, n, v[3000002];
long long int partitie(long long int v[], long long int l, long long int r)
{
long long int i = l;
for (int j = l; j < r; j++)
if (v[j] <= v[r])
{
swap(v[j], v[i]);
i++;
}
swap (v[i], v[r]);
return i;
}
long long int quick_select(long long int v[], long long int l, long long int r, long long int k)
{
if (k >= 0 && k <= r - l + 1)
{
int i = partition(v, l, r);
if (i == k)
return v[i];
if (i - l > k - 1)
return quick_select(v, l, i - 1, k);
else
return quick_select(v, i + 1, r, k + l - i - 1);
}
return -1;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
f >> n >> k;
for (int i = 0; i < n; i++)
f >> v[i];
quick_select(v, 0, n - 1, k);
g << v[k - 1];
return 0;
}