Cod sursa(job #976721)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 23 iulie 2013 19:32:36
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;

int v[3000005];

int alege(int n)
{
    int x;
    if((n/RAND_MAX))
        x=rand()%(n/RAND_MAX);
    else
        x=0;
    return ((x*RAND_MAX)+rand())%n;
}

int k;

int qsort(int st,int dr)
{
    if(st>=dr)
        return v[st];

    //int p=alege(dr-st+1)+st;
    //swap(v[p],v[st]);

    int i,j;
    for(i=st+1,j=st+1;i<=dr;i++)
        if(v[i]<v[st])
        {
            swap(v[i],v[j]);
            j++;
        }
    swap(v[st],v[j-1]);

    if(k==(j-st))
        return v[j-1];
    else if(k<(j-st))
        return qsort(st,j-2);
    k-=(j-st);
    return qsort(j,dr);
}

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

    srand(time(0));

    int n=0,i;
    fin>>n>>k;

    for(i=1;i<=n;i++)
        fin>>v[i];

    fout<<qsort(1,n)<<'\n';

    fin.close();
    fout.close();
    return 0;
}