Cod sursa(job #3352355)

Utilizator pokeChircu Andrei-Denis poke Data 26 aprilie 2026 19:53:04
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

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

int a[3000000];

int part(int st, int dr) {
    int pivot = st + rand() % (dr - st + 1);
    int p = st;

    std::swap(a[pivot], a[dr]);
    for (int i = st; i <= dr - 1; i++)
        if (a[i] <= a[dr]) {
            std::swap(a[i], a[p]);
            p++;
        }
    std::swap(a[p], a[dr]);
    return p;
}

int main() {
    int n, k, st, dr, p;
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
        fin >> a[i];

    st = 1;
    dr = n;
    while (st <= dr) {
        p = part(st, dr);
        if (p == k) {
            fout << a[p];
            break;
        }
        else if (p < k)
            st = p + 1;
        else
            dr = p - 1;
    }
    return 0;
}