Cod sursa(job #3176990)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 28 noiembrie 2023 10:42:03
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define N 3000005
using namespace std;

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

int n, k, A[N];

int Part(int st, int dr) {
    int pivot = rand() % (dr - st + 1) + st;
    int x = A[pivot];
    swap(A[dr], A[pivot]);
    int j = st - 1;
    for (int i = st; i <= dr; i++)
        if (A[i] <= x)
            swap(A[++j], A[i]);
    return j;
}

int Quickselect(int st, int dr, int k) {
    int poz = Part(st, dr);
    if (k == poz)
        return A[k];
    else if (k < poz)
        return Quickselect(st, poz - 1, k);
    return Quickselect(poz + 1, dr, k);
}

int main() {
    srand(time(NULL));
    f>>n>>k;
    for (int i = 1; i <= n; i++)
        f>>A[i];
    g<<Quickselect(1, n , k);
    return 0;
}