#include <iostream>
#include <functional>
#include<algorithm>
#include <vector>
#include <numeric>
#include <iostream>
#include <vector>
#include <functional>
using namespace std;
double get_variance(const std::vector<short>& signal, double mean, size_t start, size_t window_size)
{
if (window_size == 0) {
return 0;
}
auto start_it = signal.begin() + start;
return std::inner_product(
start_it,
start_it + window_size,
start_it,
0.0,
std::plus<>(),
[mean, window_size](short s1, short s2)
{ return (s1 - mean) * (s2 - mean) / static_cast<double>(window_size); }
);
}
int main() {
vector<short> vec = {600 , 470 , 170 , 430 , 300};
std::cout<<get_variance(vec, 394, 0, 5)<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpkb3VibGUgZ2V0X3ZhcmlhbmNlKGNvbnN0IHN0ZDo6dmVjdG9yPHNob3J0PiYgc2lnbmFsLCBkb3VibGUgbWVhbiwgc2l6ZV90IHN0YXJ0LCBzaXplX3Qgd2luZG93X3NpemUpCnsKCWlmICh3aW5kb3dfc2l6ZSA9PSAwKSB7CgkJcmV0dXJuIDA7Cgl9CglhdXRvIHN0YXJ0X2l0ID0gc2lnbmFsLmJlZ2luKCkgKyBzdGFydDsKCXJldHVybiBzdGQ6OmlubmVyX3Byb2R1Y3QoCgkJc3RhcnRfaXQsCgkJc3RhcnRfaXQgKyB3aW5kb3dfc2l6ZSwKCQlzdGFydF9pdCwKCQkwLjAsCgkJc3RkOjpwbHVzPD4oKSwKCQlbbWVhbiwgd2luZG93X3NpemVdKHNob3J0IHMxLCBzaG9ydCBzMikgCgkJeyByZXR1cm4gKHMxIC0gbWVhbikgKiAoczIgLSBtZWFuKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4od2luZG93X3NpemUpOyB9CgkpOwp9CgppbnQgbWFpbigpIHsKCXZlY3RvcjxzaG9ydD4gdmVjID0gezYwMCAsIDQ3MCAsIDE3MCAsIDQzMCAsIDMwMH07CglzdGQ6OmNvdXQ8PGdldF92YXJpYW5jZSh2ZWMsIDM5NCwgMCwgNSk8PGVuZGw7CglyZXR1cm4gMDsKfQ==