Cod sursa(job #3303731)

Utilizator petric_mariaPetric Maria petric_maria Data 17 iulie 2025 14:35:20
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");

int n, k, a[3000005], ans = 0;

int poz (int st, int dr) {
    if (st < dr) {
        int i = st, j = dr;
        int di = 0, dj = -1;
        int p = rand() % (dr - st + 1) + st;
        swap (a[p], a[st]);

        while (i < j) {
            if (a[i] > a[j]) {
                swap (a[i], a[j]);
                swap (di, dj);
                di = -di;  dj = -dj;
            }
            i += di;  j += dj;
        }
        return i;
    }
}

void sorteaza (int st, int dr) {
    if (st == dr) {
        ans = a[k];
        return;
    }
    if (st < dr) {
        int p = poz (st, dr);
        if (p == k) {
            ans = a[k];  return;
        }
        else {
            if (p < k)
                sorteaza (p+1, dr);
            else sorteaza (st, p-1);
        }
    }
}

int main()
{
    f >> n >> k;
    for (int i=1; i<=n; ++i)
        f >> a[i];

    sorteaza (1, n);

    g << ans;
    return 0;
}