#include <algorithm>
#include <iostream>
#include <array>
#include <random>
static const int NN = 128;
typedef std::array<double,NN> ArrayT;

void MakeRandomArray(ArrayT& Array){
	std::mt19937 MT(1);
	std::uniform_real_distribution<double> Dist(0,65535);

	for(size_t i=0; i<Array.size();i++){
		Array[i] = Dist(MT);
	}
}
void MakeRandomIndexedArray(ArrayT& Array){

	for(size_t i=0; i<Array.size();i++){
		Array[i] = i;
	}
	std::random_shuffle(Array.begin(),Array.end());
}

std::pair<double,double> GetMinMax(ArrayT& Array){
	double Min = Array[0];
	double Max = Array[0];

	for(size_t i=0;i<Array.size();i++){
		if(Min > Array[i]) Min = Array[i];
		if(Max < Array[i]) Max = Array[i];
	}

	return std::pair<double,double>(Min,Max);
}

double GetCenterValue(ArrayT& Array,double Center){
	double Dist=Center;
	double Value =0;
	double T = Dist;

	for(size_t i=0;i<Array.size();i++){
		T = std::abs(Array[i]-Center);
		if(T<Dist){
			Dist = T;
			Value = Array[i];
		}
	}

	return Value;
}


int main(){

	ArrayT Array={0,};
	MakeRandomArray(Array);
	//MakeRandomIndexedArray(Array);

	auto MM = GetMinMax(Array);
	double C =(MM.first+MM.second)/2.0;
	double V =GetCenterValue(Array,C);

	std::cout<<"Min:"<<MM.first<<std::endl;
	std::cout<<"Max:"<<MM.second<<std::endl;
	std::cout<<"Center:"<<V<<" Near "<<C<<std::endl;
	return 0;
	
}