Cod sursa(job #3345533)

Utilizator robert_dumitruDumitru Robert Ionut robert_dumitru Data 9 martie 2026 22:07:44
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>
#include <ctime>

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

int n, k;
int a[3000005];

int QuickSelect(int st, int dr, int k) {
    if (st == dr) return a[st];

    int pivotIdx = st + rand() % (dr - st + 1);
    std::swap(a[pivotIdx], a[dr]);

    int pivot = a[dr];
    int i = st;

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

    if (i == k) return a[i];
    if (i > k) return QuickSelect(st, i - 1, k);
    else return QuickSelect(i + 1, dr, k);
}

int main() {
    std::ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    srand(time(0));

    fin >> n >> k;
    for (int i = 1; i <= n; i++) {
        fin >> a[i];
    }
    fout << QuickSelect(1, n, k) << "\n";

    return 0;
}