Cod sursa(job #373460)

Utilizator victor.ionescuIonescu Victor Cristian victor.ionescu Data 13 decembrie 2009 20:52:54
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;
ifstream fi("sdo.in");
ofstream fo("sdo.out");
int N,A[3000010],K;

void kth_elem(int* A,int p,int u,int k){
	int start=p,end=u;
	int pivot=A[p+rand()%(u-p+1)];
	while (start<end){
		while (A[start]<pivot) ++start;
		while (A[end]>pivot) --end;
		if (start<end) swap(A[start],A[end]);
	}
	++start;--end;
	if (k<=end) kth_elem(A,p,end,k); 
	else if (k>=start) kth_elem(A,start,u,k);
}

int main(){
	srand(time(NULL));
	fi>>N>>K;
	for (int i=1;i<=N;++i) fi>>A[i];
	kth_elem(A,1,N,K);
	fo<<A[K];
	fi.close();fo.close();
	return 0;
}