Cod sursa(job #2864935)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 8 martie 2022 12:36:09
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

int N, K;
int v[3000001];

int partition(int left, int right) {
    int pivot = v[left + rand() % (right - left)];
    int i = left - 1, j = right + 1;

    while (true) {
        do
            ++i;
        while (v[i] < pivot);

        do
            --j;
        while (v[j] > pivot);

        if (i >= j)
            break;

        std::swap(v[i], v[j]);
    }

    return j;
}

void kth_element(int left, int right) {
    if (left < right) {
        int i = partition(left, right);

        if (i >= K)
            kth_element(left, i);
        else
            kth_element(i + 1, right);
    }
}

int main() {
    std::ifstream in("sdo.in");
    in >> N >> K;
    for (int i = 0; i < N; ++i)
        in >> v[i];

    srand(time(NULL));
    kth_element(0, N - 1);

    std::ofstream out("sdo.out");
    out << v[K - 1];
}