Ключ до задачі — зрозуміти, що саме розрізняє елементи після операцій.
Виберемо для кожної операції довільне велике «загальне положення» . Тоді два елементи a_i та a_j стануть різними, якщо вони й так були різними, або якщо множини операцій, що їх накривають, не збігаються. Навпаки, якщо a_i = a_j і обидва накриті однаковим набором відрізків, вони назавжди залишаться рівними. Отже, задача формулюється так:
вибрати найменшу кількість відрізків так, щоб будь-які дві позиції з однаковим значенням мали різні набори накривних відрізків.
Назвемо цей набір підписом позиції. Підпис змінюється лише на кінцях відрізків, тому масив розпадається на суцільні блоки однакового підпису, і всередині кожного блоку значення мусять бути попарно різними.
Скільки блоків дають операцій? Кінців усього , тому блоків щонайбільше 2m+1. Але найлівіший і найправіший блоки не накриті жодним відрізком — їхній підпис порожній, тобто спільний. Отже, різних підписів у «середині» щонайбільше 2m - 1, а префікс і суфікс мусять бути разом вільними від повторів.
Цю межу досяжно: наприклад, для m = 2 відрізки, що частково перекриваються, дають послідовність підписів
тобто рівно три різні блоки посередині.
Звідси алгоритм. Переберемо, де закінчується «зовнішня» частина: беремо префікс [0, p-1] і суфікс [\mathit{ptr}+1, n-1] так, щоб їхнє об'єднання не мало однакових значень. Оскільки зі зростанням суфікс може лише коротшати, усі такі пари перебираються двома вказівниками з лічильником входжень значень (перевірка «чи є повтор» — це максимум лічильника).
Для середини порахуємо — мінімальну кількість блоків, у кожному з яких значення різні. Це класична жадібність: блок тягнемо праворуч, доки не з'явиться повтор. Тоді потрібна кількість операцій дорівнює
що є розв'язком нерівності B \le 2m - 1. Якщо середина порожня, відповідь нульова — масив уже придатний.
Щоб рахувати швидко для кожного , заздалегідь обчислимо — початок наступного блоку, якщо жадібний блок починається в (знову два вказівники, тепер справа наліво), і побудуємо над цим масивом двійкові підйоми. Тоді кількість блоків на відрізку знаходиться за \mathcal{O}(\log n).
Відповідь — мінімум по всіх допустимих . Загальна складність — \mathcal{O}(n \log n). Значення сягають 10^9, тому їх варто стиснути координатно, щоб лічильники поміщалися в масив.