Cod sursa(job #1105194)

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

#define Nmax 3000001

using namespace std;

int M[Nmax];

int QuickSelect(long p, long u, long K) {
	int pivot = M[rand() % (u - p + 1) + p];
	int i = p;
	int j = u;
	while (i <= j) {
		while (M[i] < pivot) {
			i++;
		}
		while (M[j] > pivot) {
			j--;
		}
		if (i <= j) {
			swap(M[i], M[j]);
			i++;
			j--;
		}
	}
	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");
	int N,K;
	f>>N;
	f>>K;
	for(int i = 1; i <= N; i++) {
		f>>M[i];
	}
	cout<<QuickSelect(1,N,K);
	f.close();
	g.close();
	return 0;
}