Cod sursa(job #644510)

Utilizator johnny2008Diaconu Ion johnny2008 Data 6 decembrie 2011 21:33:11
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<fstream>
#include<iostream>
#include<set>
using namespace std;
#define  MAX_N 3000001
int n,k,j,i;
int A[MAX_N];
 
void sel( int li, int lf, int k)
{
	if(li == lf)
		return;
	int q ;
	int i = li-1, j = lf+1, p = A[li + (rand()%(lf-li+1))];
	q=-1;
	while(q==-1)
	{
		do
		{
			++i;
		} while(A[i] < p);
		do
		{
			--j;
		} while(p < A[j]);
		if(i < j)
			swap(A[i], A[j]);
		else
			q=j;
	}
	int t = q-li+1;
	if(t >= k)
		sel( li, q, k);
	else
		sel( q+1, lf, k-t);
}
int main(){
	ifstream f("sdo.in");
	ofstream g("sdo.out");
	f>>n>>k;

	for(i=1;i<=n;i++){
		f>>A[i];
	}
	sel(1,n,k);
	g<<A[k];
	return 0;
}