#include <iostream>
#include <algorithm>
#include <tuple>
#include <vector>
int main()
{
const std::vector<int> inputs = {3,2,6,3,7,1,8};
int left = 1; // Number 3
int right = 4; // Numbers 2,6,3,7
int middle = 2; // Numbers 1,8
for (int i = left + right; i < left + right + middle; ++i) {
auto as_tuple = [&, i](int e) { return std::make_tuple(e < inputs[i], std::abs(e - inputs[i]));};
auto comparer = [&, i](int lhs, int rhs){ return as_tuple(lhs) < as_tuple(rhs); };
auto it1 = std::min_element(inputs.begin(), inputs.begin() + left, comparer);
auto it2 = std::min_element(inputs.begin() + left,
inputs.begin() + left + right,
comparer);
std::cout << *it1 << ", " << *it2
<< " --> index "
<< std::distance(inputs.begin(), it1) << ", "
<< std::distance(inputs.begin(), it2) << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx2ZWN0b3I+CgppbnQgbWFpbigpCnsKICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4gaW5wdXRzID0gezMsMiw2LDMsNywxLDh9OwogICAgaW50IGxlZnQgPSAxOyAvLyBOdW1iZXIgMwogICAgaW50IHJpZ2h0ID0gNDsgLy8gTnVtYmVycyAyLDYsMyw3CiAgICBpbnQgbWlkZGxlID0gMjsgLy8gTnVtYmVycyAxLDgKICAgIAogICAgZm9yIChpbnQgaSA9IGxlZnQgKyByaWdodDsgaSA8IGxlZnQgKyByaWdodCArIG1pZGRsZTsgKytpKSB7CiAgICAgICAgYXV0byBhc190dXBsZSA9IFsmLCBpXShpbnQgZSkgeyByZXR1cm4gc3RkOjptYWtlX3R1cGxlKGUgPCBpbnB1dHNbaV0sIHN0ZDo6YWJzKGUgLSBpbnB1dHNbaV0pKTt9OwogICAgICAgIGF1dG8gY29tcGFyZXIgPSBbJiwgaV0oaW50IGxocywgaW50IHJocyl7IHJldHVybiBhc190dXBsZShsaHMpIDwgYXNfdHVwbGUocmhzKTsgfTsKICAgICAgICBhdXRvIGl0MSA9IHN0ZDo6bWluX2VsZW1lbnQoaW5wdXRzLmJlZ2luKCksIGlucHV0cy5iZWdpbigpICsgbGVmdCwgY29tcGFyZXIpOwogICAgICAgIGF1dG8gaXQyID0gc3RkOjptaW5fZWxlbWVudChpbnB1dHMuYmVnaW4oKSArIGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0cy5iZWdpbigpICsgbGVmdCArIHJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlcik7CiAgICAgICAgc3RkOjpjb3V0IDw8ICppdDEgPDwgIiwgIiA8PCAqaXQyCiAgICAgICAgICAgICAgICAgIDw8ICIgLS0+IGluZGV4ICIKICAgICAgICAgICAgICAgICAgPDwgc3RkOjpkaXN0YW5jZShpbnB1dHMuYmVnaW4oKSwgaXQxKSA8PCAiLCAiCiAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZGlzdGFuY2UoaW5wdXRzLmJlZ2luKCksIGl0MikgPDwgc3RkOjplbmRsOwogICAgfQp9