Cod sursa(job #1553028)

Utilizator rptomaToma Radu-Petrescu rptoma Data 19 decembrie 2015 02:15:39
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

int a[3000001],n,k;
ifstream f("sdo.in");
ofstream g("sdo.out");

int partitie(int l, int r){
    int pivot,i,j;
    srand(time(NULL));
    swap(a[l+rand()%(r-l+1)],a[(l+r)/2]);
    pivot=a[(l+r)/2];
    i=l-1;
    j=r+1;
    while(true){
        do{
            j--;
        }while(a[j]>pivot);
        do{
            i++;
        }while(a[i]<pivot);
        if(i<j) swap(a[i],a[j]);
        else return j;
    }
}

int nth(int st, int dr, int k){
    int index;
    index=partitie(st,dr);
    if(k==index) return index;
    else if(k<index) nth(st,index,k);
         else nth(index,dr,k);
}

int main()
{
    f>>n>>k;
    for(int i=1;i<=n;i++) f>>a[i];
    g<<a[nth(1,n,k)];
    return 0;
}