Cod sursa(job #645509)

Utilizator rendorzegAndrei Pavel rendorzeg Data 9 decembrie 2011 20:33:32
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<fstream>
#include<ctime>
#include <cstdlib>
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int a[3000005];
int caut(int u, int v, int k)
{
	if (u==v) return 0;
	int p=a[u+(rand()%(v-u+1))];
	int i=u-1;
	int j=v+1;
	int aux,ok=0;
	while (!ok)
	{
		do
		{
			i++;
		}
		while (a[i]<p);
		do
		{
			j--;
		}
		while (a[j]>p);
		if (i<j)
		{
			aux=a[i];
			a[i]=a[j];
			a[j]=aux;
		}
		else ok=1;
	}
	int t=j-u+1;
	if (t>=k)
		caut(u,j,k);
	else caut(j+1,v,k-t);
	return 0;
}
int main()
{
	int k,i,n;
	srand(time(NULL));
	fin>>n>>k;
	for (i=1;i<=n;i++)
		fin>>a[i];
	caut(1,n,k);
	fout<<a[k];
	return 0;
}