Cod sursa(job #1562409)

Utilizator cosmin2006cosmin2006 cosmin2006 Data 5 ianuarie 2016 00:48:27
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <ctime>
using namespace std;


int n,v[3000100];

int partitie(int p, int r) {
    int x,i,j;
    x=v[p];
    i=p-1;
    j=r+1;
    while (1) {
        do {
            j--;
        } while (v[j]>x);
        do {
            i++;
        }
        while(v[i]<x);
        if(i<j) swap(v[i],v[j]);
        else return j;
    }
}

int partitie_aleatoare (int p, int r) {
    int i;
    i=(rand() % (r-p)) + p + 1;
    //i=(r+p)/2;
    swap(v[p],v[i]);
    return partitie(p,r);
}

int s_aleator(int p, int r,int i) {
    int q,k;
    if(p==r) return v[p];
    q=partitie_aleatoare(p,r);
    k=q-p+1;
    if(i<=k) return s_aleator(p,q,i);
    else return s_aleator(q+1,r,i-k);
}

int main()
{
    srand( time(NULL) );
    int i,k;
    ifstream fin("sdo.in");
    freopen("sdo.out","w",stdout);
    fin>>n>>k;
    for(i=1; i<=n; i++) fin>>v[i];
    printf("%d ", s_aleator(1,n,k));
    return 0;
}