Cod sursa(job #1735385)

Utilizator antanaAntonia Boca antana Data 29 iulie 2016 18:00:41
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#include<stdlib.h>
#include<time.h>
#define MAXN 3000000

int n, v[MAXN+1];

inline void swap1(int a, int b)
{
    int aux=v[a];
    v[a]=v[b];
    v[b]=aux;
}
int kelement(int st, int dr, int k)
{
    int i=st, j=dr, pivot=v[st+rand()%(dr-st+1)];
    while(i<=j)
    {
        while(v[i] < pivot) ++i;
        while(v[j] > pivot) --j;
        if(i<=j) swap1(i, j), ++i, --j;
    }

    if(st<=k && k<=j) return kelement(st, j, k);
    if(i<=k && k<=dr) return kelement(i, dr, k);
    return v[k];
}
int main()
{
    srand(time(0));

    freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);

    int k;
    scanf("%d%d", &n, &k);

    for(int i=1;i<=n;++i)
        scanf("%d", &v[i]);

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

    return 0;
}