Cod sursa(job #2183462)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 23 martie 2018 10:33:52
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <stdlib.h>
#include <ctime>
#include <iostream>

using namespace std;
int v[3000001];
int poz (int st,int dr){
    int ds=0,dd=-1,aux;
    while (st!=dr){
        if (v[st]>v[dr]){
            aux=v[st];
            v[st]=v[dr];
            v[dr]=aux;
            aux=ds;
            ds=-dd;
            dd=-aux;
        }
        st+=ds;
        dr+=dd;
    }
    return st;
}
void sorteaza (int st,int dr,int k){
    if (st<dr){
        int p=poz(st,dr);
        if (k<=p-1){
            //printf ("%d %d\n",st,dr);
            sorteaza (st,p-1,k);
        }
        if (k>=p+1){
            //printf ("%d %d\n",st,dr);
            sorteaza (p+1,dr,k);
        }
    }
}
int main()
{
    FILE *fin=fopen ("sdo.in","r");
    FILE *fout=fopen ("sdo.out","w");
    int n,k,i,p;
    fscanf (fin,"%d%d",&n,&k);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    //srand (time(0));
    //for (i=n;i>=2;i--){
      //  p=1+((long long)rand()*rand())%(i-1);
       // swap(v[i],v[p]);
    //}
    sorteaza (1,n,k);
    fprintf (fout,"%d",v[k]);
    return 0;
}