Cod sursa(job #2596106)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 9 aprilie 2020 11:45:18
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

const int MAXN = 3000000 + 5;

using namespace std;

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

int n,k,v[MAXN],aux[MAXN];

void afis(){
    for(int i = 1; i <= n; i++)
        cout<<v[i]<<" ";
    cout<<endl;
}
int partitie(int l,int r){
    int pivot = l + rand() % (r - l);
    //cout<<l<<" "<<r<<" "<<v[pivot]<<endl;
    //afis();
    int index = l,piv_index = -1;
    for(int i = l; i <= r; i++){
        if(v[i] < v[pivot]){
            aux[index++] = v[i];
        }
    }
    for(int i = l; i <= r; i++){
        if(v[i] == v[pivot]){
            if(piv_index == -1)
                piv_index = index;
            aux[index++] = v[i];
        }
    }
    for(int i = l; i <= r; i++)
        if(v[i] > v[pivot])
            aux[index++] = v[i];
    for(int i = l; i <= r; i++)
        v[i] = aux[i];
    return piv_index;
}

void quicksort(int l,int r){
    if(l >= r)
        return;
    int piv = partitie(l,r);
    if(k < piv)
        quicksort(l,piv);
    if(k > piv)
        quicksort(piv + 1,r);
}

int main()
{
    in>>n>>k;
    for(int i = 1; i <= n; i++)
        in>>v[i];
    quicksort(1,n);
    out<<v[k];
    return 0;
}