Cod sursa(job #1876459)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 12 februarie 2017 13:24:10
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define Nmax 3000001
using namespace std;

ofstream g("sdo.out");

int n,k,v[Nmax];

int _qsort(int st,int dr,int x)
{
    swap(v[x],v[dr]);
    x = dr;
    int a = st,b = dr-1;
    while (a<=b)
    {
        if (v[a]>v[x] && v[b]<=v[x])
        {
            swap(v[a],v[b]);
            b--;
            a++;
        }
        else
        {
            if(v[a]<=v[x])
                a++;
            if (v[b]>v[x])
                b--;
        }
    }
    swap(v[a],v[x]);
    return a;
}

int ctbqs(int st,int dr,int poz)
{
    int x = rand()%(dr+1-st)+st;

    int mid = _qsort(st,dr,x);
    if (poz==mid)
        return v[mid];
    if (poz<mid)
        return ctbqs(st,mid-1,poz);
    else
        return ctbqs(mid+1,dr,poz);
}

int main()
{
    srand(time(NULL));
    freopen("sdo.in","r",stdin);
    scanf("%d%d",&n,&k);

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

    g<<ctbqs(1,n,k);

    return 0;
}