Cod sursa(job #2306569)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 22 decembrie 2018 16:07:05
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
 
using namespace std;
 
#define MAX_N 3000005
 
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
 
int A[MAX_N], N, K;
 
void citire()
{
	fin >> N >> K;
 
	for(int i = 1; i <= N; ++i)
		fin >> A[i];
}
 
int part(int A[MAX_N], int li, int lf)
{
	int i = li-1, j = lf+1, p = A[li];
 
	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()
{
	citire();
	sel(A, 1, N, K);
 
	fout << A[K] << "\n";
}