Cod sursa(job #2484335)

Utilizator meriniucrMeriniuc Razvan- Dumitru meriniucr Data 30 octombrie 2019 23:06:50
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <iostream>
#include <vector>

int
f(std::vector <int>& v,
  int b,
  int e,
  int k)
{
    if (b > e)
    {
        return -1;
    }

    int i = b + 1;
    int j = e;

    while (i <= j)
    {
        while (i <= j and v[i] <= v[b])
        {
            i++;
        }

        while (i <= j and v[b] <= v[j])
        {
            j--;
        }

        if (i < j)
        {
            std::swap(v[i], v[j]);
        }
    }
    
    std::swap(v[j], v[b]);

    if (j - b == k)
    {
        return v[j];
    }
    else if (j - b > k)
    {
        return f(v, b, j - 1, k);
    }

    return f(v, i, e, k - j + b - 1);
}

int main()
{
    std::ifstream in("sdo.in");
    std::ofstream out("sdo.out");

    int N;
    int k;

    in >> N;
    in >> k;

    std::vector <int> v(N);
    for (int i = 0; i < N; i++)
    {
        in >> v[i];
    }

    out << f(v, 0, N - 1, k - 1);

    return 0;
}