Cod sursa(job #1385664)

Utilizator LegionHagiu Stefan Legion Data 12 martie 2015 10:50:55
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
ofstream out("sdo.out");
int k;
int numere[3000001];
void sdo(int inceput,int sfarsit)
{
    int i=inceput;
    int j=sfarsit;
    int mij=numere[rand()%(sfarsit-inceput+1)+inceput];
    while (i<=j)
    {
        while (numere[i]<mij){i++;}
        while (numere[j]>mij){j--;}
        if (i<=j)
        {
            swap(numere[i],numere[j]);
            i++;
            j--;
        }
    }
    if (i-j==2&&j+1==k)
    {
        out<<numere[j+1];
    }
    else if (i==j==k)
    {
        out<<numere[i];
    }
    else
    {
        if (j<k)
        {
            sdo(i,sfarsit);
        }
        else
        {
            sdo(inceput,j);
        }
    }
}
int main()
{
    ifstream in("sdo.in");
    int n,i;
    in>>n;
    in>>k;
    for (i=1;i<=n;i++)
    {
        in>>numere[i];
    }
    sdo(1,n);
}