Cod sursa(job #2704079)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 9 februarie 2021 18:46:17
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
//#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

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


int n,k;
unsigned int v[3000005];

int mediana(int st,int dr)
{
    int mid=(st+dr)>>1;

    if(v[dr]<v[st])
        swap(v[dr],v[st]);

     if(v[mid]<v[st])
        swap(v[mid],v[st]);
     if(v[dr]<v[mid])
        swap(v[dr],v[mid]);

    return mid;
}

void quickselect(int st,int dr)
{
    if(st<dr)
    {
        int piv=mediana(st,dr);
        swap(v[dr],v[piv]);
        int i=st-1;

        for(int j=st;j<=dr-1;j++)
            if(v[j]<v[dr])
        {
            i++;
            swap(v[i],v[j]);
        }
        i++;
        swap(v[dr],v[i]);

        if(i==k)
        {
            out<<v[i];
            exit(0);
        }

        else if(i<k)
            quickselect(i+1,dr);
        else
            quickselect(st,i-1);



    }
    out<<v[k];
    exit(0);
}

int main()
{
    in>>n>>k;
    for(int i=1;i<=n;i++)
        in>>v[i];

      quickselect(1,n);

}