Cod sursa(job #2833851)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 15 ianuarie 2022 19:49:09
Problema Statistici de ordine Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX_N = 3e6+5;
int v[MAX_N];
int n, k;

int quickSelect(int L, int R, int K){
    if(L == R)
        return v[K];

    int P = (L + rand() % (R - L + 1)), B = L, E = R;

    while(v[B] < v[P])
        B++;

    while(v[E] > v[P])
        E--;

    while(B < E){
        swap(v[B], v[E]);
        do B++; while(v[B] < v[P]);
        do E--; while(v[E] > v[P]);
    }

    if(K <= B)
        return quickSelect(L  , B, K);
    else
        return quickSelect(B+1, R, K);
}

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

    fout<<quickSelect(1, n, k);
    return 0;
}