Cod sursa(job #392537)

Utilizator RobybrasovRobert Hangu Robybrasov Data 7 februarie 2010 18:09:46
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <cstdlib>
#define N 3000005

int A[N];

int poz(int a, int b)
{
    int t,r=a+rand()%(b-a+1);
    t=A[a]; A[a]=A[r]; A[r]=t;
    for (int i=0, j=-1; a<b; a+=i, b+=j)
        if (A[a]>A[b])
        {
            t=A[a]; A[a]=A[b]; A[b]=t;
            t=i; i=-j; j=-t;
        }
    return a;
}

int rez(int a, int b, int k)
{
    if (a<b)
    {
        int m=poz(a,b);
        if (m<k) return rez(m+1,b,k);
        if (m>k) return rez(a,m-1,k);
    }
    return A[a];
}

int main()
{
    int n,k;
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);
	scanf("%d%d",&n,&k);
    for (int i=1; i<=n; i++) scanf("%d",&A[i]);

    printf("%d",rez(1,n,k));

    return 0;
}