Cod sursa(job #2306582)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 22 decembrie 2018 16:27:08
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream>
#include<ctime>
using namespace std;
#define MAX_N 3000005
ifstream f("sdo.in");
ofstream g("sdo.out");
int A[MAX_N],N,K;
void citire()
{
	f>>N>>K;
	for(int i=1;i<=N;++i)
		f>>A[i];
}
int part(int A[MAX_N], int li, int lf)
{
	int i = li-1, j = lf+1, p = A[li + (rand()%(lf-li+1))];
	while(1)
	{
		do
		{
			++i;
		} while(A[i] < p);
		do
		{
			--j;
		} while(p < A[j]);
		if(i < j)
			swap(A[i], A[j]);
		else 
			return j;
	}
	return 0;
}
void sel(int A[MAX_N], int li, int lf, int k)
{
	if(li == lf)
		return;
	int q = part(A, li, lf);
	int t = q-li+1;
	if(t >= k)
		sel(A, li, q, k);
	else
		sel(A, q+1, lf, k-t);
}
int main()
{
	srand(time(NULL));
	citire();
	sel(A,1,N,K),g<<A[K];
}