Cod sursa(job #2848958)

Utilizator starduststardust stardust Data 14 februarie 2022 12:14:13
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <vector>
using namespace std;

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

int n, k;
vector<int> v;

int partition(int left, int right)
{
    int p = left + (rand() % (right - left + 1));
    swap(v[p], v[right]);
    int finalPosition = left - 1;

    for (int i = left; i < right; i++)
    {
        if (v[i] < v[right])
        {
            finalPosition++;
            swap(v[i], v[finalPosition]);
        }
    }
    swap(v[finalPosition + 1], v[right]);
    return finalPosition + 1;
}
void find(int left, int right)
{
    if (left >= right)
        return;
    int p = partition(left, right);
    if (p == k)
        return;
    if (p > k)
        find(left, p - 1);
    else
        find(p + 1, right);
}
int main()
{
    int x;
    in >> n >> k;
    k--;
    for (int i = 0; i < n; i++)
    {
        in >> x;
        v.push_back(x);
    }
    find(0, n - 1);
    out << v[k];
}