Cod sursa(job #2058635)

Utilizator biaiftimeIftime Bianca biaiftime Data 5 noiembrie 2017 22:32:16
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <cstdlib>
#include <time.h>
#define Nmax 3000002
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int a[Nmax],n,k;
void Read(int &n,int &k,int a[Nmax])
{
    int i;
    fin>>n>>k;
    for(i=1;i<=n;++i)
    fin>>a[i];
}
int Pivotare(int a[Nmax],int s,int d)
{
    swap(a[d],a[d-rand()%(d-s+1)]);
    int pivot=a[d];
    int i=s-1,j;
    for(j=s;j<d;++j)
    if(a[j]<pivot){++i; swap(a[i],a[j]); }
    swap(a[i+1],a[d]);
    return i+1;
}
int statistica(int a[Nmax],int s,int d,int k)
{
    if(s<d)
    {
        int pivot=Pivotare(a,s,d);
        if(k==pivot)return a[k];
        else if(pivot>k)return statistica(a,s,pivot-1,k);
             else return statistica(a,pivot+1,d,k);
    }
}

int main()
{
    Read(n,k,a);
    srand(time(0));
    fout<<statistica(a,1,n,k);
    return 0;
}