Cod sursa(job #710571)

Utilizator Dragan_ValentinDragan Valentin Dragan_Valentin Data 10 martie 2012 00:02:01
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <iostream>

using namespace std;

int n;
int a[80000];

// Searches the k'th element in the vector a[]
int search(int k,int a[80000],int n)
{
	int i;
	int lower=0,bigger=0;
	int pivot=a[rand()%n];
	int low[80000];
	int big[80000];
	// low[] - the elements lower than pivot
	// big[] - the elements bigger than pivot
	for (i=0; i<n; i++)
		if (a[i]<pivot) low[lower++]=a[i];
		else if (a[i]>pivot) big[bigger++]=a[i];
	// determine in which vector the solution is	
	if (k<=lower) { return search(k,low,lower); }
	else if (k<=n-bigger) return pivot;	
	else return search(k-n+bigger,big,bigger);
}

int main()
{
	int k,i;
	ifstream f("sdo.in");
	f>>n>>k;
	for (i=0; i<n; i++)
		f>>a[i];
	f.close();
	int k_number=search(k,a,n);
	ofstream g("sdo.out");
	g<<k_number;
	g.close();
	return 0;
}