Дерево отрезков с операцией как параметром шаблона
Условие
Дан массив и запросы: set i v (присвоить aᵢ = v) и get l r (вывести сумму, минимум и максимум на отрезке [l, r], нумерация с 1).
Напишите шаблон template <class T, class Op> class SegTree с нейтральным элементом и бинарной операцией Op (функциональный объект), и создайте три экземпляра: для std::plus<>, минимума и максимума. Для минимума и максимума подойдут лямбды без захвата, тип которых можно передать через decltype (C++20 разрешает лямбды в невычисляемом контексте).
Ввод: n (1 ≤ n ≤ 1000), массив, q (1 ≤ q ≤ 1000), затем запросы. |aᵢ|, |v| ≤ 10⁹.
Вывод: на каждый get строка sum min max.
Пример 1
Ввод:
5
3 -1 4 1 5
4
get 1 5
set 2 10
get 1 2
get 3 3
Вывод:
12 -1 5
13 3 10
4 4 4
Пример 2
Ввод:
1
-7
2
get 1 1
set 1 7
Вывод:
-7 -7 -7
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.