Cod sursa(job #2201021)

Utilizator ptr22222Petru Popescu ptr22222 Data 3 mai 2018 10:22:29
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

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

const int N= 4000002;
long long v[N],k;

void partitie3(int st,int dr,int &p,int &u)
{
    int pivot=v[st+rand()%(dr-st+1)],i=st;
    p=st;
    u=dr;
    while(i<=u)
    {
        if(v[i]<pivot)
            swap(v[i++],v[p++]);
        else if(v[i]>pivot)
                swap(v[i],v[u--]);
        else i++;
    }
    p--;
    u++;
}

void qs(int st,int dr)
{
    if(st>=dr)
        return;
    int p,u;
    partitie3(st,dr,p,u);
    if(k<=p && k>=st) qs(st,p);
    else if(k>=u && k<=dr) qs(u,dr);
    else if(k<u && k>p) return;
}

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