Cod sursa(job #483736)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 9 septembrie 2010 22:09:06
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;

const int Nmax = 300001;

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

int sel(int st, int dr, int k, int A[]) {
	int x=part(st,dr,A);
	if(x==k)
		return A[k];
	if(x<k)
			return sel(x+1,dr,k,A);
	return sel(st,x-1,k,A);
}

int main() {
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);
	
	int A[Nmax], n, i, k;
	
	srand(time(0));
	scanf("%d %d",&n,&k);
	for(i=1; i<=n; i++)
		scanf("%d",&A[i]);
	
	printf("%d\n",sel(1,n,k,A));
	
	return 0;
}