Hello, Codeforces!
I’m excited to introduce to you Neowise Labs. We’re going to host an upcoming Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2) and have prepared presents for you. Neowise Labs was founded by Max (dark_ai), Igor (Igor_Kudryashov) and me, and here is our story.
Igor_Kudryashov and I have been in the same ACM ICPC team for many years while studying at the Saratov State University. dark_ai was in the Saint Petersburg State University team so we were competitors back then :) Those years in the university we were doing the same as all other competitive programmers: solve problems, make contests, practice, practice and practice again (and sometimes study). I’ve even enjoyed being a Codeforces platform developer in my final year of study.







, где последнее уравнение решается с помощью расширенного алгоритма Евклида, а
и
. Поскольку мы знаем знаки чисел 
содержит количество единиц в бинарном представлении кратное трём, и равно 
. Для подробного знакомства с математическими функциями пола и потолка я рекомендую книгу авторов Грэхем, Кнут, Паташник "Конкретная математика". В этой книге есть отдельная глава, посвящённая этим функциям и их свойствам.
.
.
блоков. Рассмотрим те прямые, которые были добавлены до начала блока и не будут удалены в нём. Построим по этому множеству нижнее огибающее множество. Теперь, чтобы ответить на один запрос третьего типа нужно взять максимум по прямым нижнего огибающего множества и по запросам в блоке до текущего запроса. Последних не более
.

букв в ней, чтобы не было одинаковых букв подряд. С другой стороны мы можем изменить второй, четвёртый и т.д. символы на букву, которая не равна букве слева и справа от нашего отрезка.
в разборе обозначает бинарную операцию побитового исключающего или.
. Будем перебирать
. Для этого воспользуемся структурой данных
, поскольку все эти листья соответствуют
. После этого мы должны спуститься в поддерево
, пересчитав значение
, где
. Таким образом, для фиксированного
.
для всех
. Тогда
значений
.
и это наиболее ёмкая часть вычислений. Выбирая оптимальным образом значение
, мы получаем сложность всего решения
.
:
. Для всех середин отрезков посчитаем число
.
способами (это просто биномиальный коэффициент с повторениями). Количество последовательностей
. Последнюю сумму легко преобразовать к виду
. Заметим, что последняя внутренняя сумма легко суммируется с помощью известной формулы параллельного суммирования:
. Таким образом, ответ равен:
. Можно далее сворачивать сумму, чтобы получить логарифмическое решение (закнутую формулу), но в задаче это не требовалось.
. Согласно методу разделяй и властвуй посчитаем рекурсивно ответ, если он лежит целиком в левой или правой половине. Теперь нужно учесть отрезки, пересекающие середину. Рассмотрим некоторый отрезок
, где
--- взвешенная сумма в подотрезке
— взвешенная сумма на подотрезке 
.
чётных позиций. Тогда можно на этих позициях расставить наибольшие
раз.
единиц времени.
). Рассмотрим оптимальный ответ в котором есть пара строк, находящихся по этому отношению в обратном порядке. Поскольку это отношение транзитивно, то без потери общности можно считать, что это пара соседних строк. Но тогда мы их можем просто поменять местами и улучшить ответ.
. Последнее есть просто отношение для действительных чисел. Таким образом, мы доказали транзитивность отношения
и
.
, где 
, которую мы поставим на позиции
. Для перехода нужно сделать
. Каждую вершину из 
.
.
. В нашем случае 
. Значения
.
. Также заметим, что последнюю сумму можно суммировать до
, либо
. Будем аккуратно суммировать эти два случая так, чтобы ничего не посчитать два раза. Первую сумму посчитать легко, просто нужно пройти циклом по всем таким
. Для этого во-первых нужно определить при каких
будет достигаться. Легко видеть, что это полуинтервал
. Также нужно понять, что сумма вторых сомножителей в
при постоянном первом сомножителе легко считается за константное время — это просто сумма арифметической прогрессии
. Таким образом решение работает за 

