Cod sursa(job #2769377)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 15 august 2021 08:09:11
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
using namespace std;
#define MAX 3000005
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
int v [MAX];
int mediana (int st, int dr){
    int mij = (st + dr) / 2;
    if (v [dr] < v [st])
        swap (v [dr], v [st]);
    if (v [mij] < v [st])
        swap (v [mij], v [st]);
    if (v [dr] < v [mij])
        swap (v [dr], v [mij]);
    return mij;
}
void QS (int st,int dr){
    if (st < dr){
        int pivot = mediana (st,dr);
        swap (v [dr], v [pivot]);
        int ind = st - 1;
        for (int i = st; i < dr; i++)
            if (v [i] < v [dr])
                swap (v [++ ind], v[i]);
        ind ++;
        swap (v [dr], v [ind]);
        if (ind == k) fout << v [ind];
        else if (ind < k)QS (ind + 1, dr);
        else QS (st, ind - 1);
    }
    fout << v [k];
}
int main(){
    fin >> n >> k;
    for (int i = 1; i <= n; i ++)
        fin >> v [i];
    QS (1, n);
    return 0;
}