Cod sursa(job #2198314)

Utilizator moltComan Calin molt Data 24 aprilie 2018 10:52:26
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;

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

const int N = 3000001;
int v[N],k;

void partitie3(int st,int dr,int &p,int &u)
{
    int pivot = v[st+rand()%(dr-st+1)];
    int 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(int i = 1; i <= n; i++)
        in>>v[i];
    qs(1,n);
    out<<v[k];

}