Cod sursa(job #566178)

Utilizator PlayLikeNeverB4George Marcus PlayLikeNeverB4 Data 28 martie 2011 19:02:09
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <time.h>
#define maxn 3000005
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");

int i,N,K;
int v[maxn];

void citire()
{
	fin >> N >> K;
	for(i=1;i<=N;i++)
		fin >> v[i];
}

int pivot(int st, int dr)
{
	int i=st-1, j=dr+1, p=v[st+rand()%(dr-st+1)];
	while(1)
	{
		for(i++;v[i]<p;i++);
		for(j--;v[j]>p;j--);
		if(i<j)
			swap(v[i],v[j]);
		else
			return j;
	}
}

void quickselect(int st, int dr, int k)
{
	int piv,nr;
	if(st==dr) return;
	piv=pivot(st,dr);
	nr=piv-st+1;
	
	if(k<=nr)
		quickselect(st,piv,k);
	else
		quickselect(piv+1,dr,k-nr);
}

int main()
{
	srand(time(NULL));
	citire();
	quickselect(1,N,K);
	fout << v[K];
}