Cod sursa(job #2606780)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 28 aprilie 2020 16:41:33
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int NMAX = 3000005;
int a[NMAX],n,k;

int partitionA(int st,int dr){
    int piv=st+rand()%(dr-st+1);
    swap(a[dr],a[piv]);
    piv=st;
    for(int i=st;i<=dr-1;i++){
        if(a[i]<=a[dr]){
           swap(a[i],a[piv]);
           piv++;
        }
    }
    swap(a[dr],a[piv]);
    return piv;
}

void srt(int st,int dr,int k){
    if(st>=dr) return;
    int pz=partitionA(st,dr);
    if(k>pz) srt(pz+1,dr,k);
    if(k<pz) srt(st,pz-1,k);
}


int main()
{
    fin >> n >> k;
    for(int i=1;i<=n;i++) fin >> a[i];
    int st=1,dr=n;
    srt(st,dr,k);
    fout << a[k];
    return 0;
}