#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;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxyYW5kb20+CnN0YXRpYyBjb25zdCBpbnQgTk4gPSAxMjg7CnR5cGVkZWYgc3RkOjphcnJheTxkb3VibGUsTk4+IEFycmF5VDsKCnZvaWQgTWFrZVJhbmRvbUFycmF5KEFycmF5VCYgQXJyYXkpewoJc3RkOjptdDE5OTM3IE1UKDEpOwoJc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPGRvdWJsZT4gRGlzdCgwLDY1NTM1KTsKCglmb3Ioc2l6ZV90IGk9MDsgaTxBcnJheS5zaXplKCk7aSsrKXsKCQlBcnJheVtpXSA9IERpc3QoTVQpOwoJfQp9CnZvaWQgTWFrZVJhbmRvbUluZGV4ZWRBcnJheShBcnJheVQmIEFycmF5KXsKCglmb3Ioc2l6ZV90IGk9MDsgaTxBcnJheS5zaXplKCk7aSsrKXsKCQlBcnJheVtpXSA9IGk7Cgl9CglzdGQ6OnJhbmRvbV9zaHVmZmxlKEFycmF5LmJlZ2luKCksQXJyYXkuZW5kKCkpOwp9CgpzdGQ6OnBhaXI8ZG91YmxlLGRvdWJsZT4gR2V0TWluTWF4KEFycmF5VCYgQXJyYXkpewoJZG91YmxlIE1pbiA9IEFycmF5WzBdOwoJZG91YmxlIE1heCA9IEFycmF5WzBdOwoKCWZvcihzaXplX3QgaT0wO2k8QXJyYXkuc2l6ZSgpO2krKyl7CgkJaWYoTWluID4gQXJyYXlbaV0pIE1pbiA9IEFycmF5W2ldOwoJCWlmKE1heCA8IEFycmF5W2ldKSBNYXggPSBBcnJheVtpXTsKCX0KCglyZXR1cm4gc3RkOjpwYWlyPGRvdWJsZSxkb3VibGU+KE1pbixNYXgpOwp9Cgpkb3VibGUgR2V0Q2VudGVyVmFsdWUoQXJyYXlUJiBBcnJheSxkb3VibGUgQ2VudGVyKXsKCWRvdWJsZSBEaXN0PUNlbnRlcjsKCWRvdWJsZSBWYWx1ZSA9MDsKCWRvdWJsZSBUID0gRGlzdDsKCglmb3Ioc2l6ZV90IGk9MDtpPEFycmF5LnNpemUoKTtpKyspewoJCVQgPSBzdGQ6OmFicyhBcnJheVtpXS1DZW50ZXIpOwoJCWlmKFQ8RGlzdCl7CgkJCURpc3QgPSBUOwoJCQlWYWx1ZSA9IEFycmF5W2ldOwoJCX0KCX0KCglyZXR1cm4gVmFsdWU7Cn0KCgppbnQgbWFpbigpewoKCUFycmF5VCBBcnJheT17MCx9OwoJTWFrZVJhbmRvbUFycmF5KEFycmF5KTsKCS8vTWFrZVJhbmRvbUluZGV4ZWRBcnJheShBcnJheSk7CgoJYXV0byBNTSA9IEdldE1pbk1heChBcnJheSk7Cglkb3VibGUgQyA9KE1NLmZpcnN0K01NLnNlY29uZCkvMi4wOwoJZG91YmxlIFYgPUdldENlbnRlclZhbHVlKEFycmF5LEMpOwoKCXN0ZDo6Y291dDw8Ik1pbjoiPDxNTS5maXJzdDw8c3RkOjplbmRsOwoJc3RkOjpjb3V0PDwiTWF4OiI8PE1NLnNlY29uZDw8c3RkOjplbmRsOwoJc3RkOjpjb3V0PDwiQ2VudGVyOiI8PFY8PCIgTmVhciAiPDxDPDxzdGQ6OmVuZGw7CglyZXR1cm4gMDsKCQp9