Cod sursa(job #2446042)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 6 august 2019 20:32:42
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int MAXN = 3 * 1e6 + 3;
int v[MAXN], aux[MAXN], ans;
int RandomGenerator(int st, int dr){
    return ((rand() << 14) + rand() ) % (dr - st + 1) + st;
}
void quicksort(int st, int dr, int k){
    int nr = RandomGenerator(st, dr), l = st - 1, copie;
    if(st == dr){
        ans = st;
        return ;
    }
    for(int i = st; i <= dr; ++i)
        if(v[i] <= v[nr] and i != nr)
            aux[++l] = v[i];
    aux[++l] = v[nr];
    copie = l;
    for(int i = st; i <= dr; ++i)
        if(v[i] > v[nr]) aux[++l] = v[i];
    for(int i = st; i <= dr; ++i) v[i] = aux[i];
    if(copie == k){
        ans = copie;
        return ;
    }
    if(copie < k) quicksort(copie, dr, k);
    else quicksort(st , copie, k);
}
int main(){
    int n, k; fin >> n >> k;
    for(int i = 1; i <= n; ++i) fin >> v[i];
    quicksort(1, n, k);
    fout << v[ans];
    return 0;
}