Cod sursa(job #3125763)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 4 mai 2023 13:13:00
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 3e6 + 3;

int t1, t2, v[nmax], n, sol, k;

int solve(int st, int dr)
{
    int pivot = v[st];

    int cnt = 0;

    for (int i = st + 1; i <= dr; ++i)
        cnt += (v[i] <= pivot);

    int idx = st + cnt;

    swap(v[st], v[idx]);

    int t1 = st;
    int t2 = dr;

    while (t1 < idx && t2 > idx)
    {
        while (v[t1] <= pivot)
            ++t1;

        while (v[t2] > pivot)
            --t2;

        if (t1 < idx && t2 > idx)
        {
            swap(v[t1++], v[t2--]);
        }
    }

    return idx;
}

void qsort(int st, int dr)
{
    if (st >= dr)
    {
        sol = v[k];

        return;
    }

    int poz = solve(st, dr);

    if (k < poz)
        qsort(st, poz - 1);
    else
        qsort(poz + 1, dr);
}

int main()
{
    f >> n >> k;

    for (int i = 1; i <= n; ++i)
        f >> v[i];

    qsort(1, n);

    g << sol;

    //for (int i = 1; i <= n; ++i)
      //  cout << v[i] << ' ' ;

    return 0;
}