Cod sursa(job #3146990)

Utilizator DariusM17Murgoci Darius DariusM17 Data 23 august 2023 17:32:32
Problema Statistici de ordine Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
//#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;
}