Cod sursa(job #2830278)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 9 ianuarie 2022 18:07:50
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, K;
vector<int> v;

/// gasim pivotul
int pivot(int st, int dr)
{
    int poz=st+rand()%(dr-st+1), i=st;
    swap(v[dr],v[poz]);
    for(int j=st;j<dr;j++)
        if(v[j]<v[dr]){
            swap(v[j],v[i]);
            i++;
        }
    swap(v[i],v[dr]);
    return i;
}

int quickSelect(int st, int dr, int nr)
{
    int poz=pivot(st,dr);
    if(poz-st+1==nr)
        return v[poz];
    if(poz-st+1>nr)
        return quickSelect(st,poz-1,nr);
    return quickSelect(poz+1,dr,nr-(poz-st+1));
}

int main()
{
    fin>>N>>K;
    int x;
    for(int i=0;i<N;i++){
        fin>>x;
        v.push_back(x);
    }
    fout<<quickSelect(0,N-1,K);

    fin.close();
    fout.close();
    return 0;
}