Cod sursa(job #2467138)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 3 octombrie 2019 19:19:33
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <stdlib.h>
#include <time.h>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

int n,k,i,v[3000005];

int poz(int st, int dr)
{
    if (st < dr)
    {
        int i = 0; int j = -1;
        int stst = st; int drdr = dr;
        int x = st+rand()%(dr-st+1);
        swap(v[st], v[x]);
        while (stst != drdr)
        {
            if (v[stst] > v[drdr])
            {
                swap(v[stst], v[drdr]);
                int aux = i;
                i = -j;
                j = -aux;
            }
            stst += i;
            drdr += j;
        }
        return stst;
    }
}

int solve(int st, int dr, int val)
{
    if (st == dr)
        return v[st];
    int p = poz(st, dr);
    if (p == k)
        return v[k];
    if (p < k)
        return solve(p+1, dr, val);
    else
        return solve(st, p-1, val);
}

int main()
{
    fin >> n >> k;
    for (i=1; i<=n; i++)
        fin >> v[i];
    srand(time(0));
    fout << solve(1, n, k);
    return 0;
}