Cod sursa(job #1815392)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 25 noiembrie 2016 09:58:41
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <time.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,v[3000005];
int partitie(int p,int r)
{
    int x,i,j;
    x=v[p];
    i=p-1;
    j=r+1;
    while(1){
    do
    {
        i++;
    }while(v[i]<x);
    do
    {
        j--;
    }while(v[j]>x);
    if(i>=j)
        return j;
    swap(v[i],v[j]);
}
}
int partitie_aleatoare(int p, int r){
    int i;
    i=(rand() % (r-p)) + p + 1;
    swap(v[p],v[i]);
    return partitie(p,r);
}
int select(int p,int r,int i)
{
    if(p==r)
        return v[p];
    int q,length;
    q=partitie_aleatoare(p,r);
    length=q-p+1;
    if(i<=length)return select(p,q,i);
    else return select(q+1,r,i-length);
}
int main()
{
    srand(time(NULL));
    fin>>n>>k;
    for(int i=1;i<=n;i++)fin>>v[i];
    fout<<select(1,n,k);
    return 0;
}