Cod sursa(job #3326799)

Utilizator MateiDiaconuDiaconu Matei Stefan MateiDiaconu Data 30 noiembrie 2025 15:21:17
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;

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

#define MAXN 3000000

int v[MAXN];

int kth(int k, int be, int en){
    int b, e, piv;

    b = be;
    e = en;
    piv = v[b + rand() % (e - b + 1)];

    while(v[b] < piv){
        b++;
    }
    while(v[e] > piv){
        e--;
    }

    while(b < e){
        swap(v[b], v[e]);

        do{
            b++;
        }while(v[b] < piv);
        do{
            e--;
        }while(v[e] > piv);
    }

    if(be < e && k <= e){
        kth(k, be, e);
    }
    else if(e + 1 < en){
        kth(k, e + 1, en);
    }
    return v[k];
}

int main()
{
    int n, k, i;

    fin >> n >> k;

    for(i = 0; i < n; i++){
        fin >> v[i];
    }

    fout << kth(k - 1, 0, n - 1);

    fin.close();
    fout.close();

    return 0;
}