Cod sursa(job #2308482)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 27 decembrie 2018 10:57:29
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <stdlib.h>
#include <time.h>

using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
unsigned int a[3000005], n, k, rasp;
int partitie(int st, int dr)
{
    int poz=rand()%(dr-st+1)+st;
    swap(a[st], a[poz]);
    unsigned int pivot=a[st];
    while(st<dr)
    {
        while(st<dr&&a[dr]>=pivot)
            dr--;
        a[st]=a[dr];
        while(st<dr&&a[st]<=pivot)
            st++;
        a[dr]=a[st];
    }
    a[st]=pivot;
    return st;
}
void quick(int st, int dr)
{
    if(st<dr)
    {
        int poz=partitie(st, dr);
        if(poz==k)
            return;
       	if(poz>k)
        	quick(st, poz-1);
        else if(poz<k)
        	quick(poz+1, dr);
    }
}
int main()
{
    srand(time(NULL));
    fin >> n >> k;
    for(int i=1;i<=n;i++)
        fin >> a[i];
    quick(1, n);
    fout << a[k];
    return 0;
}