Cod sursa(job #2607672)

Utilizator Constantin.Dragancea Constantin Constantin. Data 29 aprilie 2020 23:35:05
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;
 
#define N 3000010
int n, k, a[N];

int rearrange(int l, int r){
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    swap(a[r], a[l + rng() % (r - l + 1)]);
    int x = a[r], st = l;
    for (int i=l; i<r; i++)
        if (a[i] <= x) swap(a[i], a[st++]);
    swap(a[r], a[st]);
    return st;
}
 
int k_th_element(int l, int r, int k){
    int index = rearrange(l, r);
    if (index == k) return a[index];
    if (k > index)
        return k_th_element(index + 1, r, k);
    return k_th_element(l, index - 1, k);
}
 
int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ifstream cin ("sdo.in");
    ofstream cout ("sdo.out");
    cin >> n >> k;
    for (int i=1; i<=n; i++) cin >> a[i];
    cout << k_th_element(1, n, k);
    return 0;
}