Cod sursa(job #2411730)

Utilizator Ioana_GaborGabor Ioana Ioana_Gabor Data 21 aprilie 2019 10:57:48
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#define NMAX 3000000

using namespace std;

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

int n,k,sir[NMAX+1];

int part(int in,int sf){
    int i=in-1,j=sf+1,piv=sir[in+(rand()%(sf-in+1))];
    while(1){
        do{
            i++;
        }while(sir[i]<piv);
        do{
            j--;
        }while(sir[j]>piv);
        if(i<j){
            swap(sir[i],sir[j]);
        }else{
            return j;
        }
    }
}

void qsort(int in,int sf,int k0){
    if(in==sf){
        return;
    }
    int j=part(in,sf);
    int aux=j-in+1;
    if(aux>=k0){
        qsort(in,j,k0);
    }else{
        qsort(j+1,sf,k0-aux);
    }
}

int main(){
    srand(clock());
    f>>n>>k;
    for(int i=1;i<=n;i++){
        f>>sir[i];
    }
    qsort(1,n,k);
    g<<sir[k];
    f.close();
    g.close();
}