Cod sursa(job #3335083)

Utilizator magnifica5Tabarca Ioana magnifica5 Data 21 ianuarie 2026 16:29:24
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int MAXN = 3000000;
int n, k;
int a[MAXN + 5];

int partition(int left, int right) {
    int pivot = a[(left + right) / 2];
    int i = left, j = right;

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

void quickselect(int left, int right, int k) {
    if (left >= right)
        return;

    int index = partition(left, right);

    if (k < index)
        quickselect(left, index - 1, k);
    else
        quickselect(index, right, k);
}

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

    quickselect(0, n - 1, k - 1);

    cout << a[k - 1] << "\n";
    return 0;
}