Cod sursa(job #662667)

Utilizator StefanLacheStefan Lache StefanLache Data 16 ianuarie 2012 21:39:41
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
#include<time.h>
#include<stdlib.h>//libraria in care e rand
int partitie(int A[],int st,int dr)
{
    int x=A[dr];
    int i=st-1;
    for(int j=st;j<dr;j++)
        if(A[j]<=x)
        {
            i++;
            A[i]=A[i] + A[j] -(A[j]=A[i]);
        }
    A[i+1]=A[i+1] + A[dr] - (A[dr]=A[i+1]);
    return i+1;
}
int partitie_random(int A[],int st,int dr)
{
    int y=rand() %dr;
    A[dr]=A[dr] + A[y] - (A[y]=A[dr]);//interschimbare
    return partitie(A,st,dr);
}
int gasire(int A[],int st,int dr,int x)
{
    if(st==dr)
        return A[st];
    int q=partitie(A,st,dr);
    int k=q-st+1;
    if(x==k)
        return A[x];
    if(x<k)
        return gasire(A,st,q-1,x);
    return gasire(A,q+1,dr,x-k);
}
int main()
{
    srand(time(NULL));
    FILE *f=fopen("sdo.in","rt");
    FILE *g=fopen("sdo.out","wt");
    int A[300000],n,x,i;
    fscanf(f,"%i%i",&n,&x);
    for(i=1;i<=n;i++)
        fscanf(f,"%i",&A[i]);
    fprintf(g,"%i",gasire(A,1,n,x));
    return 0;
}