Cod sursa(job #1419972)

Utilizator Alex1199Alex Bercea Alex1199 Data 17 aprilie 2015 11:29:53
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <iostream>
#include <ctime>
long int a[3000000];
long int n, k;
FILE *f=fopen("sdo.in","r");
FILE *g=fopen("sdo.out","w");
int partition( int p, int r)
{
    int pivot = a[r];

    while ( p < r )
    {
        while ( a[p] < pivot )
            p++;

        while ( a[r] > pivot )
            r--;

        if ( a[p] == a[r] )
            p++;
        else if ( p < r )
        {
            int tmp = a[p];
            a[p] = a[r];
            a[r] = tmp;
        }
    }

    return r;
}
long int Select(long int l,long int r, long int i)
{
    if (l==r) return a[l+1];
    long int q=partition(l,r);
    k=q-l+1;
    if(i==k) return a[q];
    else if (i<k) return Select(l,q-1,i);
         else     return Select(q,r,i-k);
}
int main()
{
    fscanf(f,"%ld%ld",&n,&k);
    for(int i=0; i<n; i++)
    {
        fscanf(f,"%ld",&a[i]);
    }
    fprintf(g,"%ld",Select(0,n-1,k));
    return 0;
}