Cod sursa(job #1246602)

Utilizator simaghitaSima Gheorghe Eugen simaghita Data 21 octombrie 2014 12:53:50
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include <cstdlib>
#include <ctime>
const int Max=3000001;
int n,a[Max],k;
using namespace std;
void citire()
{
    int i;
    ifstream fin("sdo.in");
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>a[i];
    fin.close();
}
int sdo(int st, int dr, int k)
{
    if(st==dr) return a[st];
    int poz = st + ( rand() % (dr-st+1));
    int i,j,pivot;
    pivot=a[poz];
    i=st;
    j=dr;

    while(i<=j)
    {
        while(a[i]< pivot)
            ++i;
        while(a[j]>pivot)
            --j;
        if(i<=j)
        {
            swap(a[i],a[j]);
            ++i;
            --j;
        }

    }
    if(j-st+1 >= k) return sdo(st,j,k);
    else return sdo(j+1, dr, k - j + st-1);
}
void afisare()
{
    ofstream fout("sdo.out");
    fout<<sdo(1,n,k)<<"\n";
    fout.close();
}
int main()
{
    srand(time(NULL));
    citire();
    afisare();
    return 0;
}