Дан одномерный целочисленный массив A длины N. Нам нужно Q запросов каждого из следующих типов:
ПРИМЕЧАНИЕ. M фиксируется равным 10^9 + 7.
Запрос 1 : 1 x y v : Это означает добавление v ко всем элементам от x до y в 1 базовом индексированном массиве, а затем взять их по модулю M.
for (i = x; i <= y; i++)
A[i] += v;
A[i] %= M;
Запрос 2: 2 x y v: это означает умножение v на все элементы от x до y в 1 базовом индексированном массиве, а затем взять их по модулю M.
for (i = x; i <= y; i++)
A[i] *= v
A[i] %= M
Запрос 3 : 3 x y v : Это означает замену v на все элементы от x до y в 1 базовом индексированном массиве.
for (i = x; i <= y; i++)
A[i] = v
Запрос 4 : 4 x y : Это запрос отчета, который должен найти сумму значений в A от x до y, т. е.
sum = 0;
for (i = x; i <= y; i++)
sum += A[i]
sum %= M
Output sum.
Теперь, как обрабатывать эти запросы? Я знаю, как обрабатывать запросы, если это были запросы на добавление и суммирование с деревом сегментов. Но понятия не имею об этом. Пожалуйста, помогите мне решить эту проблему.
Ограничения: 1 ≤ N,Q ≤ 10^5 и 1 ≤ начальное значение A[i],v ≤ 10^9