Cod sursa(job #1255280)

Utilizator danielmaxim95FMI Maxim Daniel danielmaxim95 Data 4 noiembrie 2014 17:04:28
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>

using namespace std;

int v[3000000],n,k,gasit;

void dvd(int st,int dr,int &m)
{
    int i=st,j=dr,pi=0,pj=1;
    while(i<j)
    {
        if(v[i]>v[j])
        {
            v[i]=v[i]^v[j]^(v[j]=v[i]);
            pi=pi^pj^(pj=pi);
        }
        i+=pi;
        j-=pj;
    }
    m=i;
}

void quick(int st,int dr)
{
    int m;
    if((st<dr)&&(!gasit))
    {
        dvd(st,dr,m);
        if(m==k)
            gasit=v[m];
        else
        {
        quick(st,m-1);
        quick(m+1,dr);
        }
    }
}

int main()
{
    FILE *f,*g;
    int i,x;
    f=fopen("sdo.in","r");
    fscanf(f,"%d %d",&n,&k);
    for(i=1; i<=n; i++)
        fscanf(f,"%d", &v[i]);
    fclose(f);

    gasit=0;
    quick(1,n);

    g=fopen("sdo.out","w");
    fprintf(g,"%d",gasit);
    fclose(g);
    return 0;
}