Розв'язання
Спочатку знайдемо відповідь без виконання операції.
Це просто максимальна довжина неперервного відрізка, що складається лише з одиниць.
Тепер розглянемо операцію в позиції .
Якщо s_i=0, операцію можна виконати лише за умови
Якщо s_i=1, операцію можна виконати завжди.
Після вибору позиції не більше трьох позицій можуть стати рівними :
де
а
Отже, спочатку потрібно знайти L_i та R_i для кожної позиції.
Пошук L_i
Стиснемо координати значень c_i.
Будемо обробляти позиції зліва направо та підтримувати дерево Фенвіка.
Для кожного стисненого значення дерево зберігатиме максимальний індекс позиції з нулем і таким значенням, яку ми вже обробили.
Для позиції робимо запит по всіх значеннях, строго менших за c_i.
Максимальний індекс серед них і буде рівним L_i.
Після цього, якщо s_i=0, додаємо позицію у дерево Фенвіка.
Пошук R_i
Аналогічно обробляємо позиції справа наліво.
Тепер дерево Фенвіка зберігає мінімальний індекс.
Для кожної позиції запит по всіх значеннях, строго менших за c_i, дає R_i.
Таким чином, усі значення L_i та R_i можна знайти за
Відрізки навколо змінених позицій
Для кожної позиції визначимо [lo_x,hi_x] як максимальний відрізок одиниць, що містить , якщо змінити лише позицію на .
Якщо s_x=1, це просто звичайний максимальний відрізок одиниць, який містить .
Якщо s_x=0, розширюємося від через усі послідовні одиниці безпосередньо зліва та справа.
Усі ці значення можна знайти за .
Тепер розглянемо операцію в позиції .
Візьмемо всі наявні позиції серед
Їх не більше трьох.
Відсортуємо їх:
Кожна позиція x_j спочатку відповідає відрізку
Дві сусідні змінені позиції x_j та x_{j+1} потраплять в один фінальний відрізок одиниць тоді і тільки тоді, коли між ними немає незміненого нуля.
Нехай pref_i — кількість нулів серед перших позицій.
Тоді між x_j та x_{j+1} немає нуля рівно тоді, коли
Якщо ця умова виконується, відповідні компоненти можна об'єднати.
Оскільки змінених позицій не більше трьох, кожну можливу операцію можна перевірити за .
Доведення коректності
Операція може змінити лише позиції , L_i та R_i.
Тому кожен новий відрізок одиниць, який виникає після операції, повинен містити хоча б одну з цих позицій.
Для кожної зміненої позиції відрізок [lo_x,hi_x] містить рівно всі послідовні одиниці, які будуть з'єднані з , якщо змінити тільки її.
Два такі відрізки з'єднуються після операції рівно тоді, коли між відповідними зміненими позиціями немає незміненого нуля.
Префіксні суми кількості нулів перевіряють саме цю умову.
Отже, для кожної можливої операції ми коректно розглядаємо всі нові відрізки одиниць, які можуть виникнути.
Разом із варіантом, коли операція взагалі не виконується, це дає оптимальну відповідь.
Складність
Два проходи з деревом Фенвіка працюють за
Уся інша передобробка займає , а кожна позиція перевіряється за .
Отже, загальна складність становить
за часом та
за пам'яттю.