Cod sursa(job #1291273)

Utilizator ZimmyZimmermann Erich Zimmy Data 12 decembrie 2014 17:24:13
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,i,a[3000010];
void locate(int,int);
int main()
{
    srand(time(0));
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>a[i];
    locate(1,n);
    fout<<a[k];
    return 0;
}
void locate(int L,int R)
{
    int M,st,dr;
    if(L==R)return;
    if(R==L+1)
    {
        if(a[L]>a[R])
        {
            int aux=a[L];
            a[L]=a[R];
            a[R]=aux;
        }
        return;
    }
    M=L+rand()%(R-L+1);
    M=a[M];
    for(st=L,dr=R;dr>=st;)
    {
     if(a[st]<M)st++;
        else
            if(a[dr]>=M)dr--;
                else
                {
                    int aux=a[st];
                    a[st]=a[dr];
                    a[dr]=aux;
                    st++;dr--;
                }
    }
    if(k<=dr)locate(L,dr);
    else locate(st,R);
}