Cod sursa(job #854294)

Utilizator IoannaPandele Ioana Ioanna Data 13 ianuarie 2013 11:42:43
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#include<vector>
#include<ctime>
#include<cstdlib>

using namespace std;
int n,k;
vector <int> v;

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

void scan()
{
    int a;
    in>>n>>k;
    for (int i=1;i<=n;i++)
    {
        in>>a;
        v.push_back(a);
    }
}

int pivot(int st,int dr)
{
    int a,b,c;
    srand(time(NULL));
    a=st+rand()%(dr-st+1);
    return a;
}

int part(int st,int dr)
{
    int i,j,p;
    int aux;
    i=st-1;
    p=pivot(st,dr);
    aux=v[p];
    v[p]=v[dr];
    v[dr]=aux;
    p=v[dr];
    for (j=st;j<dr;j++)
    {
        if (v[j]<=p)
        {
            ++i;
            aux=v[j];
            v[j]=v[i];
            v[i]=aux;
        }
    }
    ++i;
    aux=v[i];
    v[i]=v[dr];
    v[dr]=aux;
    return i;
}

int search(int st,int dr)
{
    int p;
    p=part(st,dr);
    if (p==k-1)
        return v[p];
    if (p<k-1)
        search(p+1,dr);
    else search(st,p-1);
}

int main()
{
    scan();
    out<<search(0,n-1);
    return 0;
}