Cod sursa(job #1863636)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 31 ianuarie 2017 03:32:47
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>

using namespace std;

int n,sct,a[3000005],m[3000005];

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)
{
    int i=p-1;
    for(int j=p;j<q;j++)
        if(a[j]<=x)
        {
            i++;
            swap(a[i],a[j]);
        }
    a[i]=x;
    return i;
}

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,p+k-k1-1);
}

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