Cod sursa(job #1732512)

Utilizator xSliveSergiu xSlive Data 21 iulie 2016 19:32:29
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <random>
#include <stdlib.h>
#include <time.h>

using namespace std;
#define NMAX 3000010
long n,i;
long v[NMAX];
ifstream f("sdo.in");
ofstream g("sdo.out");
long partitie(long *v,long ii,long is){
    long i,j;
    i=ii-1;
    j=is+1;
    long pivot=v[ii];
    while(true){
        do{
            i++;
        }while(v[i]<pivot);
        do{
            j--;
        }while(v[j]>pivot);
        if(i<j)
            swap(v[i],v[j]);
        else return j;
    }
}

long partitieAleatoare(long *v,long ii, int is){
    srand(time(0));
    long nr = rand() % (is-ii+1);
    nr+=ii;
    swap(v[nr],v[ii]);
    return partitie(v,ii,is);
}

long iStatistics(long *v,long ii,long is,long i){
    if(ii == is)
        return v[ii];
    else{
        long q = partitieAleatoare(v,ii,is);
        if(i<=q)   return iStatistics(v,ii,q,i);
        else return iStatistics(v,q+1,is,i);
    }
}

int main()
{

    f >> n;
    f >> i;
    for(long k=0;k<n;k++){
        f >> v[k];
    }
    g << (long)iStatistics(v,0,n-1,i-1);
    return 0;
}