Cod sursa(job #1883581)

Utilizator andysoloAndrei Solo andysolo Data 18 februarie 2017 09:20:25
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <algorithm>
#define NMAX 3000000+5

using namespace std;

int N,k,v[NMAX];

int part(int st,int dr)
{
    int i,j,p;
    p=v[(st+dr)>>1];
    j=st-1;

    for(int i=st;i<=dr;i++)
        if(v[i]<=p)swap(v[++j],v[i]);
    return j;
}

int fmin(int st,int dr,int x)
{
    int poz=part(st,dr);
    if(poz==x)return v[poz];
    else if(x<poz)return fmin(st,poz-1,x);
    else if(x>poz) return fmin(poz+1,dr,x);
}

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]);

    int ans=fmin(1,N,k);
    printf("%d",ans);

    return 0;
}