Cod sursa(job #586423)

Utilizator drywaterLazar Vlad drywater Data 1 mai 2011 01:05:48
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <ctime>
#include <cstdlib>
int n,v[3000005],k,i;
int caut(int x,int y,int k)
{
    if (x==y) return 0;
    int p=v[x+(rand()%(y-x+1))];
    int i=x-1,j=y+1,aux,ok=0;
    while (!ok)
    {
        do
        {
            i++;
        }
        while (v[i]<p);
        do
        {
            j--;
        }
        while (v[j]>p);
        if (i<j)
        {
            aux=v[i];
            v[i]=v[j];
            v[j]=aux;
        }
        else ok=1;
    }
    if (j-x+1>=k)
        caut(x,i,k);
    else caut(i+1,y,k-j+x-1);
    return 0;
}
int main(void)
{
    srand(time(NULL));
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (i=1;i<=n;i++)
        scanf("%d",&v[i]);
    caut(1,n,k);
    printf("%d\n",v[k]);
    return 0;
}