Cod sursa(job #1194237)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 3 iunie 2014 10:52:37
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;
int n,k,i,a[3000010],ST,DR,L,R,M,aux;
int main()
{
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    srand(time(0));
    for(L=1,R=n;R-L-1;)
    {
        M=L+rand()%(R-L+1);
        M=a[M];
        ST=L;DR=R;
        do
        {
            while(a[ST]<M)ST++;
            while(a[DR]>M)DR--;
            if(ST<=DR){aux=a[ST];a[ST]=a[DR];a[DR]=aux;ST++;DR--;}

        }
        while(ST<=DR);

        if(DR>=L&&k<=DR)R=DR;
        else L=ST;
    }
    printf("%d",a[k]);
    return 0;
}