Cod sursa(job #856858)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 17 ianuarie 2013 00:04:21
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;

int n,k,a[3000001];
void quick(int l,int r){
	if(l<r){
		
	int piv=rand()%(r-l+1)+l;
	int x=l,y=r,aux;
	
	while(x<=y){
		while(a[x]<a[piv])
			++x;
		while(a[y]>a[piv])
			--y;
		if(x<=y){
			aux=a[x];
			a[x]=a[y];
			a[y]=aux;
			 ++x; --y;
		}
	}
	if(y+1==k){
		printf("%d",a[k]);
		return;
	}
	
	if(k>=x && x<=r)
		quick(x,r);
	else
		if(y>=l) quick(l,y);
} else printf("%d",a[l]);
}

int main(){
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i){
		scanf("%d",a+i);
	}
	srand(time(NULL));
	quick(1,n);


}