Cod sursa(job #3197538)

Utilizator Maftei_TudorMaftei Tudor Maftei_Tudor Data 27 ianuarie 2024 09:40:52
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <time.h>
#include <cstdlib>

using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N = 3e6 + 5;

int n, k, v[N];

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

    while(1) {
        do {
            i++;
        } while(v[i] < piv);
        do {
            j--;
        } while(piv < v[j]);

        if(i < j)
            swap(v[i], v[j]);
        else return j;
    }
}

void n_elm(int left, int right, int k) {
    if(left == right)
        return;

    int p = part(left, right);
    int q = p - left + 1;

    if(q >= k)
        n_elm(left, p, k);
    else n_elm(p+1, right, k-q);
}

int main()
{
    srand(time(NULL));

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

    n_elm(1, n, k);

    out << v[k];
    return 0;
}