Cod sursa(job #1806745)

Utilizator Remus12Remus Dan Remus12 Data 15 noiembrie 2016 17:48:07
Problema Statistici de ordine Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <cstdlib>

using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N=100000;
int v[N];

void schimb(int &a,int &b)
{
    int c=a;
    a=b;
    b=c;
}

int partitie(int v[],int st,int dr)
{
    int i,j,piv=v[dr];
    for(i=j=st; i<dr; i++)
        if(v[i]<piv)
        {
            schimb(v[i],v[j]);
            j++;
        }
    schimb(v[j],v[dr]);
    return j;
}
void qs(int v[],int st,int dr,int k)
{
    if(st>=dr) return;
    int p=partitie(v,st,dr);
    if(k<p)
        qs(v,st,p-1,k);
    if(k>p)
        qs(v,p+1,dr,k);
}

int main()
{
    int n,i,v[N],j,st,p,k;
    in>>n>>k;
    for(i=1; i<=n; i++)
        in>>v[i];
    for(i=n; i>=1; i--)
    {
        j=1+rand()%i;
        schimb(v[i],v[j]);
    }
    qs(v, 1, n,k);
    out<<v[k];

    return 0;
}