Cod sursa(job #856658)

Utilizator SovStoStoicescu Mihail Cristian SovSto Data 16 ianuarie 2013 20:31:02
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<cstdlib>
#include<time.h>
 
using namespace std;
int n,k,s[3000001];
 
int partitie(int st,int dr)
{
    int aux,dif=dr-st+1;
    int i=st-1;
    srand(time(NULL));
    int piv=rand()%dif+st;
    aux=s[piv];
    s[piv]=s[dr];
    s[dr]=aux;
    piv=s[dr];
    for (int j=st;j<dr;j++)
    {
        if (s[j]<=piv)
        {
            ++i;
            aux=s[j];
            s[j]=s[i];
            s[i]=aux;
        }
    }
    ++i;
    aux=s[i];
    s[i]=s[dr];
    s[dr]=aux;
    return i;
}
 
int cauta(int st,int dr)
{
    int piv;
    piv=partitie(st,dr);
    if (piv==k-1)
        return s[piv];
    if (piv<k-1)
        cauta(piv+1,dr);
    else cauta(st,piv-1);
}
 
int main()
{
    FILE*f,*g;
    f=fopen("sdo.in","r");
    g=fopen("sdo.out","w");
    fscanf(f,"%d%d",&n,&k);
    for (int i=0;i<n;i++)
    {
        fscanf(f,"%d",&s[i]);
    }
    fprintf(g,"%d",cauta(0,n-1));
 
}