Cod sursa(job #643976)

Utilizator andunhillMacarescu Sebastian andunhill Data 4 decembrie 2011 23:11:31
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int N, K;

int a1[3000001];
int a2[3000001];

int sort_inter(int *a1, int *a2, int st, int dr)
{	int i, j;
	int ps, pd;
	
	if(st == dr) return a1[st];
	
	int pivot = rand() % (dr - st + 1) + st;
	
	ps = st; pd = dr;
	for(i = st; i <= dr; i++)
	{	if(i == pivot) i++;
		if(i > dr) break;
		
		if(a1[i] <= a1[pivot])
			a2[ps] = a1[i] , ps++;
		else a2[pd] = a1[i], pd--;
	}	
	a2[ps] = a1[pivot];
	pivot = ps;
		
	if(K == pivot)
		return a2[pivot];
	if(K < pivot)
		return sort_inter(a2, a1, st, ps - 1);
	else return sort_inter(a2, a1, ps + 1, dr);
}

int main()
{	int i;
	
	f>>N>>K;
	for(i = 1; i <= N; i++) 
		f>>a1[i];
	
	g<<sort_inter(a1, a2, 1, N);
	
	f.close();
	g.close();
	return 0;
}