Pagini recente » Cod sursa (job #2063618) | Cod sursa (job #2821294) | Cod sursa (job #3267074) | Cod sursa (job #139536) | Cod sursa (job #3146990)
//#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const string file = "sdo";
ifstream cin(file + ".in");
ofstream cout(file + ".out");
#define FAST ios_base::sync_with_stdio(0), cin.tie(0),cout.tie(0) ;
int v[3000005], n,k;
int part(int st, int dr) {
int poz_pivot = st + (rand() % (dr - st + 1)) - 1, val_pivot, ans = st;
val_pivot = v[poz_pivot];
swap(v[poz_pivot], v[dr]);
for (int i = st; i < dr; ++i) {
if (v[i] <= val_pivot) {
swap(v[i], v[ans]);
ans++;
}
}
swap(v[ans], v[dr]);
return ans;
}
int quickselect(int st, int dr, int val) {
if (k > 0 && k <= dr - st + 1) {
int poz = part(st, dr);
if (poz == k) return v[poz];
if (k < poz) return quickselect(st, poz - 1, k);
return quickselect(poz + 1, dr, k);
}
}
int main(void)
{
srand(NULL);
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> v[i];
cout << quickselect(1, n, k);
return 0;
}