Cod sursa(job #2275050)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 2 noiembrie 2018 20:05:36
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
#define N 3003000
int v[N],i,n,k,ans;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int FindElement(int k,int l,int r)
{
    int poz = l + rand() % (r - l),it = l;
    swap(v[poz],v[r-1]);
    poz = r-1;
    while (it < poz)
        if(v[it] > v[poz])
        {
            swap(v[it],v[poz - 1]);
            swap(v[poz],v[poz - 1]);
            --poz;
        }
        else
            ++it;
    if(poz > k)
        return FindElement(k,l,poz);
    if(poz < k)
        return FindElement(k,poz,r);
    return v[poz];
}
int main()
{
    srand(time(NULL));
    fin >> n >> k;
    for (i = 0;i < n; ++i)
        fin >> v[i];
    ans = FindElement(k - 1,0,n);
    fout << ans;
    return 0;
}