Cod sursa(job #483740)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 9 septembrie 2010 22:22:37
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>

using namespace std;

#define Nmax 3000001

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() {
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);
	
	srand(time(0));
	scanf("%d%d",&n,&k);
	for(int i=1; i<=n; i++)
		scanf("%d",&A[i]);
	rez(1,n);
	printf("%d\n",A[k]);
	
	return 0;
}