Cod sursa(job #483742)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 9 septembrie 2010 22:24:38
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#include<cstdlib>
#include<ctime>
#include<algorithm>

using namespace std;

#define Nmax 3000001

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

int A[Nmax], n, k;

int part(int st, int dr) {
	int i=st-1, j=dr+1, val, pivot;
	pivot=st+rand()%(dr-st+1);
	val=A[pivot];
	while(1) {
		do i++; while(A[i]<val);
		do j--; while(A[j]>val);
		if(i<j)
			swap(A[i],A[j]);
		else
			return j;
	}
}

void rez(int st, int dr) {
	if(st<dr) {
		int x=part(st,dr);
		if(x>=k) 
			rez(st,x);
		else 
			rez(x+1,dr);	
	}
}

int main() {
	srand(time(0));
	f>>n>>k;
	for(int i=1; i<=n; i++)
		f>>A[i];
	rez(1,n);
	g<<A[k];
	
	f.close();
	g.close();
	return 0;
}