Cod sursa(job #1290759)

Utilizator ZimmyZimmermann Erich Zimmy Data 11 decembrie 2014 18:57:36
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>

using namespace std;
int n,k,i,a[3000010];
void locate(int,int);
int main()
{
    srand(time(0));
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    locate(1,n);
    printf("%d\n",a[k]);
    return 0;
}
void locate(int L,int R)
{
    int M,st,dr;
    if(L==R)return;
    if(R==L+1)
    {
        if(a[L]>a[R])
        {
            int aux=a[L];a[L]=a[R];a[R]=aux;
        }
        return;
    }
    M=(L+R)/2;
    M=a[L];
    for(st=L,dr=R;dr>=st;)
    {
        if(a[st]<M)st++;
            else
                if(a[dr]>M)dr--;
                            else
                            {
                                int aux=a[st];a[st]=a[dr];a[dr]=aux;
                                st++;dr--;
                            }
    }
    if(k<=dr)locate(L,dr);
    else locate(st,R);
}