Cod sursa(job #2300730)

Utilizator TooHappyMarchitan Teodor TooHappy Data 11 decembrie 2018 21:43:22
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k;
vector< int > a;

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

    swap(a[right], a[pivotPoz]);

    for (int j = left; j < right; ++j) {
        if (a[j] < pivot) {
            ++i;
            swap(a[i], a[j]);
        }
    }

    swap(a[i + 1], a[right]);
    return i + 1;
}

void quickSort(int left, int right) {
    if (left < right) {
        int pivot = partition(left, right);

        if (k < pivot) {
            quickSort(left, pivot - 1);
        }
        if (k > pivot) {
            quickSort(pivot + 1, right);
        }
    }
}

int main() {
    ios::sync_with_stdio(false); in.tie(0); out.tie(0);
    srand(time(NULL));

    in >> n >> k;
    
    a.resize(n + 1);
    for (int i = 1; i <= n; ++i) in >> a[i];

    quickSort(1, n);

    out << a[k] << "\n";

    in.close(); out.close();

    return 0;
}