Розв'язання
Сигнал може перебувати лише у двох станах: або .
Тому дію будь-якого відрізка можна описати матрицею розміру 2\times2.
Для матриці нехай — максимальна винагорода, яку можна отримати, якщо сигнал входить у відрізок у стані та виходить із нього у стані .
Якщо такий перехід неможливий, його значення дорівнює .
Нехай два сусідні відрізки описуються матрицями та .
Тоді їх об'єднання описується max-plus множенням:
Таким чином, матриці двох сусідніх відрізків можна об'єднати за сталий час.
Для кожної вершини дерева відрізків будемо зберігати п'ять матриць.
— жоден елемент не змінено;
— змінений відрізок починається на лівій межі;
— змінений відрізок закінчується на правій межі;
— змінений відрізок знаходиться всередині поточного відрізка;
— змінено весь поточний відрізок.
Нехай вершина складається з лівого сина та правого сина .
Якщо нічого не змінюється, то
Для стану існує два варіанти.
Змінений відрізок може закінчитися всередині лівого сина:
Або весь лівий син змінений, а відрізок продовжується у правому сині:
Тому
Аналогічно,
Для стану існує п'ять можливостей.
Змінений відрізок повністю знаходиться у лівому сині:
Або повністю знаходиться у правому сині:
Він може закінчуватися точно на правій межі лівого сина:
Або починатися точно на лівій межі правого сина:
Нарешті, він може перетинати межу між двома синами:
Отже,
Якщо змінюється весь відрізок, то
Лист дерева
Для одного елемента нехай — його матриця переходів для початкового значення d_i.
Нехай — матриця переходів після заміни
Тоді
а
Для відрізка з одного елемента неможливо вибрати непорожній змінений відрізок, який знаходиться строго всередині нього, тому всі значення матриці спочатку дорівнюють .
Щоб побудувати матрицю переходів для цифри , розглянемо обидва можливі початкові стани сигналу.
Якщо
стан змінюється на протилежний.
Якщо
стан не змінюється.
Якщо
стан стає рівним .
Якщо
стан стає рівним .
Якщо після проходження елемента сигнал опинився у стані , отримуємо винагороду w_{i,s}.
Запити
Для запиту [l,r] отримаємо п'ять матриць, що відповідають цьому відрізку, за допомогою дерева відрізків.
Перед позицією сигнал знаходиться у стані .
Тому відповіддю буде максимальне значення серед обох можливих кінцевих станів у всіх п'яти матрицях:
Матриця відповідає випадку, коли ми не виконуємо жодної заміни.
Інші чотири матриці разом покривають усі можливі непорожні відрізки, на яких виконується заміна.
Оновлення
При зміні значення d_i перебудовуємо відповідний лист дерева.
Після цього перераховуємо всі вершини на шляху від цього листа до кореня.
Доведення коректності
Кожен можливий змінений відрізок відносно поточного відрізка належить до одного з типів , , або .
Формули об'єднання розглядають усі можливі положення зміненого відрізка відносно межі між двома синами.
Max-plus множення матриць коректно об'єднує як переходи стану сигналу, так і отримані винагороди для двох послідовних відрізків.
Отже, кожна з п'яти матриць зберігає максимальну винагороду для відповідного типу зміни.
Для запиту ми беремо максимум серед усіх значень, досяжних із початкового стану , у матрицях , , , та .
Це враховує як випадок без заміни, так і кожен можливий непорожній відрізок для заміни.
Тому отримане значення є точно шуканою максимальною винагородою.
Складність
Кожна матриця має сталий розмір, тому об'єднання двох вершин дерева відрізків займає .
Кожен запит та кожне оновлення обробляють O(\log n) вершин.
Отже, загальна складність становить
за часом та
за пам'яттю.