×
Подсказка
## Контейнер для скользящего среднего
Нам требуется накапливать набор чисел, добавляя новые значения и выталкивая старые. Для этого отлично подойдет класс `std::queue`. В нем операции добавления элемента в конец очереди и извлечения из начала очереди выполняются за константное время `O(1)`.
## Выполнение методов add() и val() за O(1)
Наивный способ расчета среднего арифметического из значений в окне работает за `O(N)`, где `N` — размер окна. Ведь чтобы посчитать сумму и разделить ее на размер окна, нужно пройтись по всем элементам контейнера.
Вместо этого можно завести поле класса, хранящее сумму элементов в окне. При добавлении нового числа в методе `add()` прибавлять его к сумме. И вычитать из нее самое старое значение, если оно вытесняется из окна.
Чтобы не накапливать погрешность, сумма должна быть целой.
При вызове метода `val()` останется поделить ее на размер окна. Он тоже целочисленный, поэтому не забудьте воспользоваться `static_cast()`.