Cod sursa(job #1064473)

Utilizator sorin2kSorin Nutu sorin2k Data 21 decembrie 2013 21:52:55
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<fstream>
#include<cstdlib>
#include<ctime>
using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

int tab[3000000], n, lo, hi;

inline void swap(int &a, int &b) {
	int aux = a;
	a = b;
	b = aux;
}

int partition() {
	int i, j, piv;
	srand(time(NULL));
	piv = rand() % (hi - lo) + lo;
	swap(tab[hi-1], tab[piv]);
	j = lo-1;
	for(i = lo; i < hi-1; i++) {
		if(tab[i] < tab[hi-1]) {
			j++;
			swap(tab[j], tab[i]);
		}
	}
	swap(tab[hi-1], tab[j+1]);
	return j+1;
}

int main() {
	int k, i, stop = 0, m;
	fin >> n >> k;
	k--;
	for(i = 0; i < n; i++) {
		fin >> tab[i];
	}
	lo = 0, hi = n;
	while(stop == 0) {
		m = partition();
		if(m == k) stop = 1;
		else {
			if(m < k) lo = m+1;
			else hi = m;
		}
	}
	fout << tab[m];
	return 0;
}