Cod sursa(job #1263615)

Utilizator Vladut-Vlad Panait Vladut- Data 14 noiembrie 2014 23:09:00
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
#define max 3000001
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int v[max], n, k;

int prt(int left, int right)
{
    int i =left-1;
    int j= right+1;
    int p= v[(rand()% (right-left +1) +1)];
    while(1)
    {
        do ++i; while (v[i]<p);
        do --j; while (v[j]>p);
        if (i<j)
        v[i]=v[i]^v[j]^(v[j]=v[i]);
        else return j;
    }
    return 0;


}

void sdo (int left, int right)
{

     if(left==right)
        return;
     int t=prt(left,right);

     if(t>=k)
        sdo(left, t);
     else sdo(t+1, right);

}

int main()
{
    int i;
    fin>>n>>k;
    for( i=1; i<=n; ++i)
    fin>>v[i];
    srand(9242342);
    sdo(1, n);
    fout<<v[k]<<' ';
    fin.close();
    fout.close();
    return 0;
    }