Cod sursa(job #3334849)

Utilizator Andreea1501013Andreea Andreea1501013 Data 20 ianuarie 2026 11:30:53
Problema Statistici de ordine Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;
vector<int> v;
int sol=0;

mt19937 rnd(time(nullptr));

int K;
void nthElement(int st, int dr)
{
    if(st>=dr)
    {
        return;
    }
    int r=rnd();
    int poz= (max(r,-r)%(dr-st+1))+st;
    int pivot=v[poz];
    swap(v[poz],v[dr]);
    int j=st;
    for(int i=st;i<dr;i++)
    {
        if(v[i]<=pivot)
        {
            if(v[j]>pivot)
            {
                swap(v[j],v[i]);
            }
            j++;
        }
    }
    swap(v[j],v[dr]);
    if(j==K)
    {
        sol=v[j];
        st=dr;
        return;
    }
    if(K<j)
    {
        nthElement(st,j-1);
    }
    else
    {
        nthElement(j+1,dr);
    }
}

int main()
{
    ifstream cin("sdo.in");
    ofstream cout("sdo.out");
    int N,nr;
    cin>>N>>K;
    K--;
    for(int i=0;i<N;i++)
    {
        cin>>nr;
        v.push_back(nr);
    }
    nthElement(0,N-1);
    cout<<sol;
    return 0;
}