Cod sursa(job #1043031)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 27 noiembrie 2013 21:56:55
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;

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

const int MAXN = 3000005;
int N, K, v[MAXN];

void Swap(int a, int b)
{
	int aux = v[a];
	v[a] = v[b];
	v[b] = aux;
}

int HoarePartition(int left, int right) {
	int pivot = v[left],
		i = left - 1,
		j = right + 1;
	while (1) {
		do { --j; } while (v[j] > pivot);
		do { ++i; } while (v[i] < pivot);
		if (i < j) Swap(i, j);
		else return j;
	}
}

int RandomHoarePartition(int left, int right) {
	int ran = (rand() % (right - left)) + left + 1;
	Swap(ran, left);
	return HoarePartition(left, right);
}

int QSort(int left, int right) {
	if (left == right) return v[left];
	int pivot = RandomHoarePartition(left, right);

	if (left <= pivot && K <= pivot) QSort(left, pivot);
	else if (pivot <= right && K > pivot) QSort(pivot + 1, right);
}

int main()
{
	srand(time(NULL));

	f >> N >> K;
	for (int i = 1; i <= N; ++i)
		f >> v[i];

	g << QSort(1, N) << '\n';
	/*
	for (int i = 1; i <= N; ++i)
		g << v[i] << ' ';*/
	
	return 0;
}