Cod sursa(job #1863637)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 31 ianuarie 2017 04:05:50
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>

using namespace std;

int n,sct,a[3000005],b[3000005],c[3000005],vfb,vfc;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

void read()
{
    fin>>n>>sct;
    for(int i=0;i<n;i++)
        fin>>a[i];
}

int part(int a[],int p,int q,int x)
{
    vfc=p;
    vfb=p;
    int i=p-1;
    for(int i=p;i<q;i++)
        if(a[i]<x)
            b[vfb++]=a[i];
        else
            c[vfc++]=a[i];
    for(int i=p;i<vfb;i++)
        a[i]=b[i];
    for(int i=vfb;i<vfb+vfc-p;i++)
        a[i]=c[i-vfb];
    for(int i=vfb;i<vfb+vfc-p;i++)
        if(a[i]==x)
    {
        swap(a[vfb],a[i]);
        break;
    }
    return vfb;
}

int select(int a[],int p,int q,int k)
{
    int r=rand()%q+p;
    r=part(a,p,q,a[r]);
    int k1=r;
    if(k==k1)
        return a[k];
    else
    if(k<k1)
        return select(a,p,k1,k);
    else
        return select(a,k1+1,q,k);
}

int main()
{
    read();
    //fout<<part(a,0,n,a[0])<<"\n";
    fout<<select(a,0,n,sct-1);
    return 0;
}