Cod sursa(job #2699735)

Utilizator Alex_DiaconuDiaconu Alexandru Alex_Diaconu Data 25 ianuarie 2021 18:51:20
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

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

int v[3000001], n, k, aux[3000001];

void Quick (int left,int right)
{
    if (left>=right)
    {
        return;
    }
    int ok=1;
    for (int i=left+1; i<=right; i++)
    {
        if (v[i]!=v[i-1])
        {
            ok=0;
            break;
        }
    }
    if (ok==1)
    {
        return;
    }
    int x=rand()%(right-left+1)+left;
    int nr=0,cp;
    for (int i=left; i<=right; i++)
    {
        if (v[i]<=v[x])
        {
            aux[++nr]=v[i];
        }
    }
    cp=nr;
    for (int i=left; i<=right; i++)
    {
        if (v[i]>v[x])
        {
            aux[++nr]=v[i];
        }
    }
    for (int i=1; i<=nr; i++)
    {
        v[left+i-1]=aux[i];
    }
    if (k<left+cp)
    {
        Quick(left,left+cp-1);
    }
    else
    {
        Quick(left+cp,right);
    }
}

int main()
{
    cin >> n >> k;
    for (int i=1; i<=n; i++)
    {
        cin >> v[i];
    }
    srand(time(0));
    Quick(1,n);
    cout << v[k];
    return 0;
}