Cod sursa(job #1419944)

Utilizator Alex1199Alex Bercea Alex1199 Data 17 aprilie 2015 10:02:13
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <iostream>
#include <ctime>
int a[3000000];
FILE *f=fopen("sdo.in","r");
FILE *g=fopen("sdo.out","w");
int Select(int A[],int k,int l,int r)
{
    int i, j, m, s;
    i=l;
    j=r;
    if(l==r) return A[r-1];
    else
    {
        s=l+rand()%(r-l+1)-1;
        m=a[s];
        while(i<j)
        {
            while(a[i]<m)i++;
            while(a[j]>m)j--;
            if(i<j)
            {
                std::swap(a[i],a[j]);
                i++;
                j--;
            }
        }
        if(k < j) return Select(A,k,l,j);
        else      return Select(A,k,i,r);
    }
}
int main()
{
    long int n, k;
    fscanf(f,"%ld%ld",&n,&k);
    for(int i=0; i<n; i++)
    {
        fscanf(f,"%d",&a[i]);
    }
    fprintf(g,"%d",Select(a,k-1,0,n-1));
    return 0;
}