Cod sursa(job #381682)

Utilizator FlorianFlorian Marcu Florian Data 11 ianuarie 2010 12:50:04
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
using namespace std;
#include<fstream>
#include<cstdlib>
#include<ctime>
#define MAX_N 3000002
int A[MAX_N], N, K;
int part(int pi, int pf)
{
	int i = pi-1, j = pf+1, x = A[pi + rand()%(pf-pi+1)];
	while(1)
	{
		do { ++i; } while(A[i] < x);
		do { --j; } while(x < A[j]);
		if(i<j) swap(A[i],A[j]);
		else return j;
	}
}
void qsort(int pi, int pf, int k)
{
	if(pi==pf) return;
	int q = part(pi, pf);
	int nr = q-pi+1;
	if(nr >= k) qsort(pi, q, k);
	else qsort(q+1,pf,k-nr);
}
int main()
{
	ifstream f("sdo.in"); ofstream g("sdo.out");
	srand(time(NULL));
	f>>N>>K;
	int i;
	for(i=1;i<=N;++i) f>>A[i];
	qsort(1,N,K);
	g<<A[K]<<"\n";
	return 0;
}