Cod sursa(job #1105177)

Utilizator s1mpMihai Alexandru s1mp Data 11 februarie 2014 16:01:28
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<iostream>
#include<fstream>

#define Nmax 3000001

using namespace std;

long long M[Nmax];

long long QuickSelect(long p, long u, long K) {
	long pivot = M[rand() % (u - p + 1) + p];
	long i = p;
	long j = u;
	while (i < j) {
		while (M[i] < pivot) {
			i++;
		}
		while (M[j] > pivot) {
			j--;
		}
		if (i < j) {
			swap(M[i],M[j]);
			i++;
		}
	}
	if (i > K) {
		return QuickSelect(p,i-1,K);
	} else if (i < K) {
		return QuickSelect(i+1,u,K);
	} else {
		return M[i];
	}
}

int main() {
	ifstream f("sdo.in");
	ofstream g("sdo.out");
	long long N,K;
	f>>N;
	f>>K;
	for(int i = 0; i < N; i++) {
		f>>M[i];
	}
	g<<QuickSelect(0,N-1,K-1);
	f.close();
	g.close();
	return 0;
}