Cod sursa(job #1038448)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 21 noiembrie 2013 15:42:59
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;


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

const int MAXN = 300005;
int N, v[MAXN], K;
vector<int> ind;

void QSort(vector<int> numere, int st)
{
	long long num = numere.size();

	if (num == 1)
		g << v[numere[0]] << '\n';
	else if (num > 1)
	{
		vector<int> stanga, dreapta;
		int pivot = rand() % num;

		for (int i = 0; i < num; ++i)
		{
			if (v[numere[i]] < v[numere[pivot]]) stanga.push_back(numere[i]);
			else if (v[numere[i]] >= v[numere[pivot]]) dreapta.push_back(numere[i]);
		}

		if (st + stanga.size() >= K)
			QSort(stanga, st), dreapta.clear();
		else
			QSort(dreapta, st + stanga.size()), stanga.clear();
	}
}

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

	f >> N >> K;
	ind.resize(N);
	for (int i = 0; i < N; ++i)
		f >> v[i], ind[i] = i;

	QSort(ind, 0);

	f.close();
	g.close();

	return 0;
}