Cod sursa(job #3344823)

Utilizator matei__bBenchea Matei matei__b Data 5 martie 2026 21:16:11
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX=3000008;

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

int n,k;
int a[NMAX+2];

int get_nr(int left,int right)
{
    static random_device rd;
    static mt19937 gen(rd());
    uniform_int_distribution<> distrib(left,right);
    return distrib(gen);
}

int quickselect(int st,int dr,int k)
{
    int ind=get_nr(st,dr);
    int pivot=a[ind];
    swap(a[ind],a[dr]);
    int j=st;
    for(int i=st; i<dr; i++){
        if(a[i]<pivot){
            swap(a[j],a[i]);
            j++;
        }
    }
    swap(a[dr],a[j]);

    if(k==j)
        return a[j];
    
    if(k<j)
        return quickselect(st,j-1,k);
    return quickselect(j+1,dr,k);
}

int main() 
{   
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin >> n >> k;
    for(int i=1; i<=n; i++)
        fin >> a[i];
    fout << quickselect(1,n,k) << "\n";
    return 0;
}