eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

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

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

Вам задано масив \textbf{A} з \textbf{256} елементів \textbf{a_0}, \textbf{a_1}, ..., \textbf{a_255}, який спочатку заповнено нулями. Вам необхідно підтримувати дві операції --- зміни на відрізку та знаходження суми на відрізку. Операція додавання на відрізку має вигляд \textbf{Add(L, R, value)} і означає, що необхідно елементам масиву \textbf{a_L}, \textbf{a_\{L+1\}}, ..., \textbf{a_R} додати \textbf{value}. Операція знаходження суми на відрізку має вигляд \textbf{Get(L, R)} і повинна повертати суму \textbf{a_L+a_\{L+1\}+...+a_R}. Для економії часу на введення/виведення перша операція буде являти собою \textbf{Add(L, R, 1)} з наперед заданими \textbf{L} та \textbf{R}. Кожна наступна операція повинна являти собою \textbf{Add(min(L_new, R_new), max(L_new, R_new), 1)}, де \textbf{L_new} та \textbf{R_new} обчислюютбся за формулами: \textbf{L_new = Get(min(L, R), max(L, R)) mod p}, \textbf{R_new = 255 - Get(min(L, R), max(L, R)) mod p}. де \textbf{mod} - це операція остачі по модулю. Після кожної такої операції виконується присвоювання \textbf{L = Lnew}, \textbf{R = Rnew}. \InputFile У єдиному рядку вхідних даних записано чотири цілих числа \textbf{q}, \textbf{L}, \textbf{R}, \textbf{p}, де \textbf{q} --- кількість операцій \textbf{Add}, які потрібно зробити, \textbf{L} та \textbf{R} --- стартові значення, \textbf{p} --- модуль, за яким потрібно брати остачі (\textbf{1} ≤ \textbf{q} ≤ \textbf{5·10^6}, \textbf{0} ≤ \textbf{L} ≤ \textbf{R} ≤ \textbf{255}, \textbf{1} ≤ \textbf{p} ≤ \textbf{125}). \OutputFile Виведіть \textbf{Get(0, 255)} після останньої проведеної операції \textbf{Add}.
Ліміт часу 1.5 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
100 1 1 25
Вихідні дані #1
24489
Автор Євген Соболєв
Джерело III Міжнародна Літня школа програмування 2013 м. Севастополь