Cod sursa(job #2198288)

Utilizator napsausageMateita David napsausage Data 24 aprilie 2018 10:11:54
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>
using namespace std;

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

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

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