F. Прибавляем, суммируем
1500 мс · 256 МБ · всё или ничего
Есть массив целых чисел длины , изначально заполненный нулями. Нужно сперва обработать случайных запросов вида «прибавление на отрезке», затем случайных запросов вида «сумма на отрезке».
Запросы порождаются генератором:
unsigned int a, b; // даны во входных данных
unsigned int cur = 0;
unsigned int nextRand() {
cur = cur * a + b; // вычисляется с переполнениями
return cur >> 8; // число от 0 до 2^24 − 1
}
Запрос первого вида: add = nextRand(), затем l = nextRand(), r = nextRand(), и если , границы меняются местами. Запрос второго вида: то же без add. Сперва порождаются все запросы первого вида, затем второго.
Формат ввода
На первой строке числа , (). На второй строке пара целых чисел , от 1 до .
Формат вывода
Выведите сумму ответов на все запросы второго типа по модулю .
Примеры
ввод
5 5 13 239
вывод
811747796
Войдите, чтобы отправлять решения.