Cod sursa(job #1308569)

Utilizator SorinmocanuFMI Sorin Mocanu Sorinmocanu Data 4 ianuarie 2015 13:26:15
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
using namespace std;
unsigned long a[3000000];
int n,k,p;

void poz (int li,int ls,int &p,unsigned long a[3000000])
{
     int i=li,j=ls,c,i1=0,j1=-1;
     while (i<j)
     {
         if (a[i]>a[j])
         {
             c=a[j]; a[j]=a[i]; a[i]=c;
             c=i1; i1=-j1; j1=-c;
         }
        i=i+i1;
        j=j+j1;
     }
         p=i;
}

void quick (int li,int ls)
{
    if(li<ls)
    {
        poz(li,ls,p,a);
        if(p>k) quick(li,p-1);
        else if(p<k) {quick(li,p-1);
        quick(p+1,ls);}
    }
}

int main()
{   unsigned int i;
    FILE *f,*g;
    f=fopen("sdo.in","r");
    g=fopen("sdo.out","w");

    fscanf(f,"%d%d",&n,&k);
    for (i=1;i<=n;i++) fscanf(f,"%d",&a[i]);

    //fprintf(g,"%d",divide(1,n,k));
    //ifstream f("sdo.in");
    //ofstream g("sdo.out");
    //int i;
    //f>>n>>k;
    //for(i=1;i<=n;i++)
    //    f>>a[i];
   quick(1,n);
   //nth_element(a+1, a+k, a+n+1);
   fprintf(g,"%d",a[k]);
   // g<<a[k];
    fclose(f);
    fclose(g);
    return 0;
    }