Cod sursa(job #1894533)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 26 februarie 2017 22:13:02
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;

int N, K, a[3000005];

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

void nthElement(int left, int right) {
    int i = left, j = right;
    int pivot = left + rand() % (right - left + 1);

    while (i <= j) {
        while (a[i] < a[pivot]) {
            ++i;
        }

        while (a[j] > a[pivot]) {
            --j;
        }

        if (i <= j) {
            swap(a[i], a[j]);
            ++i;
            --j;
        }
    }

    if (left < j && j >= K) {
        nthElement(left, j);
    } else if (i < right && j < K) {
        nthElement(i, right);
    }
}

int main() {
    srand(time(NULL));
    f >> N >> K;

    for (int i = 1; i <= N; ++i) {
        f >> a[i];
    }

    nthElement(1, N);
    g << a[K] << '\n';

//    for (int i = 0; i < N; ++i) {
//        g << a[i] << ' ';
//    }
    return 0;
}