Cod sursa(job #586422)

Utilizator drywaterLazar Vlad drywater Data 1 mai 2011 01:00:38
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <stdio.h>
#include <ctime>
#include <cstdlib>
int n,v[3000000],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;
    while (1)
    {
        i++;
        while (v[i]<p) i++;
        j--;
        while (v[j]>p) j--;
        if (i<j)
        {
            aux=v[i];
            v[i]=v[j];
            v[j]=aux;
        }
        else break;
    }
    if (i+x-1>=k)
        caut(x,i,k);
    else caut(i+1,y,k-i-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;
}