Cod sursa(job #1314016)

Utilizator eneandradaEne Oana-Andrada eneandrada Data 11 ianuarie 2015 14:04:49
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int i,n,k,j,pozitie,v[3000005];

int part(int s, int d)
{
    int pivot=v[s+rand()%(d-s+1)]; //pivot aleator
    while(s<=d)
    {
        while(pivot>v[s])
            s++;
        while(pivot<v[d])
            d--;
        if(s<=d)
            { swap(v[s],v[d]); s++; d--; }
    }
    return d;
}

void sord(int v[], int s, int d, int k)
{
    if (s >= d)
        return ;
    int poz=part(s,d); //da pozitia pivotului aleator
    int t=poz-s+1; //elemente intre capatul din stanga al intervalului si pozitia pivotului (incluzand pivotul)
    if(t>=k) //elementul cautat se afla in subvectorul din stanga
        sord(v,s,poz,k);
        else //elementul cautat se afla in subvectorul din dreapta
            sord(v,poz+1,d,k-t);
}

int main()
{
    f>>n>>k;
    for(i=1;i<=n;i++)
        f>>v[i];
    sord(v,1,n,k);
    g<<v[k];
    return 0;
}