Cod sursa(job #650366)

Utilizator lavinia_nLavinia Nastase lavinia_n Data 17 decembrie 2011 22:09:08
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
#include<time.h>
#include<fstream>
#include <cstdlib>

using namespace std;

#define MAX_N 3000005

ifstream in ("sdo.in");
ofstream out ("sdo.out");

int A[MAX_N], n, k;



void citire (){
     in >> n >> k;
     for(int i=1; i<=n; ++i)
        in >> A[i];
}

int divizeaza (int s, int d) {
    int i=s-1, j=d-1, piv=A[s+(rand()%(d-s+1))];
    while(i<j) {
               while(A[i]<piv)
                              i++;
               while(A[j]>piv)
                              j--;
               if(i<j)
                      swap (A[i], A[j]);
               else return j;
               }
    return 0;
}

void select (int s, int d, int k) {
     if(s<d){
        int q=divizeaza(s,d);
        int t=q-s+1;
        if(t>=k)
             select(s,q,k);
        else
             select(q+1,d,k-t);
             }
}

int main() {
    srand(time(NULL));
    citire();
    select(1,n,k);
    out<<A[k]<<"\n";
    return 0;
}