Cod sursa(job #1237781)

Utilizator george_stelianChichirim George george_stelian Data 4 octombrie 2014 19:58:53
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>

using namespace std;

const int maxn=3000005;
int v[maxn],n,k;

int impartire(int v[maxn],int st,int dr)
{
    int x=v[st+(rand()%(dr-st+1))];
    while(1)
    {
        for(;v[st]<x;st++);
        for(;v[dr]>x;dr--);
        if(st<dr) swap(v[st],v[dr]);
        else return dr;
    }
}

int main()
{
    freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++) scanf("%d",&v[i]);
    srand(time(0));
    int st=1,dr=n;
    while(st<dr)
    {
        int x=impartire(v,st,dr);
        if(k<=x) dr=x;
        else st=x+1;
    }
    printf("%d",v[k]);
    return 0;
}