#include <iostream>
#include <numeric>
#include <type_traits>
#include <utility>
using namespace std;
template<class InputIterator>
using yourType = typename std::decay<decltype(*std::declval<InputIterator>())>::type;
template<class InputIterator>
yourType<InputIterator> mean(InputIterator first, InputIterator last)
{
return std::accumulate(first, last, yourType<InputIterator>()) / std::distance(first, last);
}
int main()
{
double vals[] = { 1, 3, 5, 6, 3, 2 };
auto kk = mean(begin(vals), end(vals));
cout << kk << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8dXRpbGl0eT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgp1c2luZyB5b3VyVHlwZSA9IHR5cGVuYW1lIHN0ZDo6ZGVjYXk8ZGVjbHR5cGUoKnN0ZDo6ZGVjbHZhbDxJbnB1dEl0ZXJhdG9yPigpKT46OnR5cGU7Cgp0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgp5b3VyVHlwZTxJbnB1dEl0ZXJhdG9yPiBtZWFuKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkgCnsKCXJldHVybiBzdGQ6OmFjY3VtdWxhdGUoZmlyc3QsIGxhc3QsIHlvdXJUeXBlPElucHV0SXRlcmF0b3I+KCkpIC8gc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCk7Cn0KCmludCBtYWluKCkKewoJZG91YmxlIHZhbHNbXSA9IHsgMSwgMywgNSwgNiwgMywgMiB9OwoJYXV0byBrayA9IG1lYW4oYmVnaW4odmFscyksIGVuZCh2YWxzKSk7Cgljb3V0IDw8IGtrIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==