Cod sursa(job #1883655)

Utilizator andysoloAndrei Solo andysolo Data 18 februarie 2017 09:52:05
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 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];
    i=st-1;
    j=dr+1;
    while(true)
    {
        do
        {
            ++i;
        }
        while(v[i]<p);

        do
        {
            --j;
        }
        while(v[j]>p);

        if(i<j)swap(v[i],v[j]);
        else return j;
    }
    //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,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;
}