Cod sursa(job #658829)

Utilizator yamahaFMI Maria Stoica yamaha Data 9 ianuarie 2012 17:49:21
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<ctime>
#include<cstdlib>
#include<fstream>

using namespace std;

#define max 3000005

int n, k, m[max];
ifstream f("sdo.in");
ofstream g("sdo.out");

int fragment(int m[max],int first,int last)
{
    int unu=first-1;
    int ultim=last+1;
    int q=m[first+(rand()%(last-first+1))];
    while(2)
    {
       do{ ++unu;
       }while(m[unu]<q);
       do{ --ultim;
       }while(m[ultim]>q);
       if(unu<ultim) swap(m[unu],m[ultim]);
       else return ultim;
    }
    return 0;
}

void processing(int m[max],int first,int last,int k)
{
     if(first==last) return;
     int fr=fragment(m,first,last);
     int y=fr-first+1;
     if(y>=k) processing(m,first,fr,k);
     else processing(m,fr+1,last,k-y);
}

int main ()
{
    f>>n>>k;
    for(int i=1;i<=n;i++) f>>m[i];
    srand(time(NULL));
    processing(m,1,n,k);
    g<<m[k]<<"\n";
    
    return 0;
}