Cod sursa(job #2314387)

Utilizator CosaMateiMatei Cosa Gabriel CosaMatei Data 8 ianuarie 2019 13:59:57
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX=3e6;

int a[NMAX],n,t;

int rand_pivot(int l, int r)
{
    return rand() % (r-l) + l;
}

int v_partition(int l, int r)
{
    int x=a[l];
    int j=l;
    for(int i=l+1; i<=r; ++i)
    {
        if(a[i]<x)
        {
            j++;
            swap(a[i],a[j]);
        }
    }
    swap(a[l],a[j]);
    return j;
}

int kth_element(int l, int r)
{
    if(l>=r)
    {
        return l;
    }
    int pivot=rand_pivot(l,r);
    swap(a[l],a[pivot]);
    int m=v_partition(l,r);
    if(t<m)
    {
        return kth_element(l,m-1);
    }
    else if(t>m)
    {
        return kth_element(m+1,r);
    }
}

void read()
{
    in>>n>>t;
    t--;
    for(int i=0; i<n; ++i)
    {
        in>>a[i];
    }
}

int main()
{
    read();
    int ans=a[kth_element(0,n-1)];
    out<<ans;
    return 0;
}