Cod sursa(job #2540440)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 7 februarie 2020 10:10:36
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define cin fin
#define cout fout

using namespace std;

ifstream fin  ("sdo.in");
ofstream fout ("sdo.out");

int n, k;
int v[3000005];

int poz (int st, int dr){
    int j, x;
    x = st + rand ()%(dr - st + 1);
    swap (v[x], v[st]);
    j = 0;
    while (st < dr){
        if (v[st] > v[dr]){
            swap (v[st], v[dr]);
            j = 1 - j;
        }
        st += j;
        dr -= 1 - j;
    }
    return st;
}

int cuicsort (int st, int dr, int k){
    if (st == dr){
        return v[st];
    }
    int p = poz (st, dr);
    if (p == k){
        return v[k];
    }
    else if (p > k){
        return cuicsort (st, p - 1, k);
    }
    else{
        return cuicsort (p + 1, dr, k);
    }
}

int main(){
    cin >> n >> k;
    for (int i=1; i<=n; i++){
        cin >> v[i];
    }
    srand (time(0));
    cout << cuicsort (1, n, k);
    return 0;
}