Cod sursa(job #479509)

Utilizator razvi9Jurca Razvan razvi9 Data 24 august 2010 12:23:44
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int arange(int *a, int n)
{
	int st = 0;
	int dr = n - 1;
	bool dir = false;
	while (st < dr)
	{
		if (a[st] > a[dr])
			swap(a[st], a[dr]), dir = !dir;
		if(dir) 
			++ st;
		else
			-- dr;
	}

	return st;
}

void order(int *a, int n, int k)
{
	int j = rand() % n;
	swap(a[0], a[j]);
	j = arange(a, n);
	if(j == k)
		return;

	if(j < k)
		order(a + j, n - j, k - j);
	else
		order(a, j, k);
}

int main()
{
	srand(time(NULL));
	freopen("sdo.in", "r" ,stdin);
	freopen("sdo.out", "w", stdout);

	int k, n;
	cin >> n >> k;
	-- k;
	int *a;
	a = new int[n];
	for(int i=0;i<n;++i)
		cin >> a[i];

	order(a, n, k);
	cout << a[k];

	delete a;
	return 0;
}