Cod sursa(job #856255)

Utilizator krissu93FMI Tiugan Cristiana Elena krissu93 Data 16 ianuarie 2013 09:01:57
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
ifstream in("sdo.in");
ofstream out("sdo.out");
 
int a[3000010];
 void change (int i, int j){
	 int aux=a[i];
	 a[i]=a[j];
	 a[j]=aux;
 }
 
int partition(int a[], int p, int q)
{
    int x, i, j, aux;
    x=a[p];
    j=p;
    for(i=p+1;i<=q;i++)
        if(a[i]<=x)
        {
            j++;
         change(i,j);
        }
   change(j,p);
    return j;
}
 
int mysecpartition(int a[], int p, int q)
{
    int s,pivot;
    s=q-p+1;
    srand(time(NULL));
    pivot=p+(rand()%s);
	change(pivot,p);
    return partition(a,p,q);
}
 
int select(int a[], int p, int q, int i)
{
    int x,d,j;
    if(p==q) return a[p];
    x=mysecpartition(a,p,q);
 
 
 
    d=x-p+1;
    if(d==i) return a[x];
    else if(i<d) return select(a,p,x-1,i);
    else if(i>d) return select(a,x+1,q,i-d);
}
 
 
int main()
{
  
    int i,k,n;
    in>>n>>k;
    for(i=1;i<=n;i++) in>>a[i];
    out<<select(a,1,n,k);
	 return 0;
}