Дерево відрізків#5952

Дерево відрізків

1,5 секунди
64 мегабайти
Середня

Вам задано масив з елементів a_0, a_1, \ldots, a_{255}, який спочатку заповнений нулями. Необхідно реалізувати два типи операцій: додавання на відрізку та знаходження суми на відрізку.

Операція додавання на відрізку описується як \textbf{Add}(L, R, value), тобто потрібно додати число до кожного елемента масиву a_L, a_{L+1}, \ldots, a_R. Операція знаходження суми на відрізку описується як \textbf{Get}(L, R) і повинна повертати \sum_{i=L}^{R} a_i.

Для економії часу на введення/виведення перша операція завжди \textbf{Add}(L, R, 1) з заданими та . Кожна наступна операція має вигляд

\textbf{Add}(\min(L_{new}, R_{new}), \max(L_{new}, R_{new}), 1),

де L_{new} та R_{new} обчислюються так:

L_{new} = \textbf{Get}(\min(L, R), \max(L, R)) \bmod p,
R_{new} = 255 - \textbf{Get}(\min(L, R), \max(L, R)) \bmod p,

де означає залишок по модулю .

Після кожної такої операції потрібно виконати присвоєння L := L_{new} і R := R_{new}.

Вхідні дані

У єдиному рядку входу записано чотири цілих числа , , , (1 \leq q \leq 5 \cdot 10^6,\ 0 \leq L \leq R \leq 255,\ 1 \leq p \leq 125), де — кількість операцій , і — початкові значення, — модуль.

Вихідні дані

Виведіть значення \textbf{Get}(0, 255) після всіх виконаних операцій .

Приклади

Приклад 1

Loading
Loading