Олимпиадный тренинг

Задача . G2. На блоки (усложнённая версия)


Это сложная версия задачи. В данной версии \(q \le 200\,000\).

Последовательность чисел называется хорошей, если элементы разбиты на блоки как в \([3, 3, 3, 4, 1, 1]\). Формально, если два элемента равны, то все элементы между ними должны быть тоже равны тому же значению.

Определим сложность последовательности как минимальное число элементов, которое нужно поменять, чтобы получить хорошую последовательность. Однако, если вы заменяете хотя бы один \(x\) на какое-то значение \(y\), нужно заменить все остальные значения \(x\) на \(y\) тоже. Например, для \([3, 3, 1, 3, 2, 1, 2]\) не разрешается поменять первую \(1\) на \(3\), а вторую \(1\) на \(2\). Вы можете или не заменять \(1\) совсем, или заменить их все на что-то одно.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и \(q\) изменений.

Каждое изменение имеет вид «\(i\) \(x\)» — заменить \(a_i\) на \(x\).

Выведите сложность изначальной последовательности и последовательности после каждого изменения. Обратите внимание, что изменения не независимы (изменение сохраняется на будущее).

Входные данные

Первая строка содержит целые числа \(n\) и \(q\) (\(1 \le n \le 200\,000\), \(0 \le q \le 200\,000\)) — длина последовательности и число изменений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 200\,000\)) — изначальную последовательность.

Каждая из следующих \(q\) строк содержит целые числа \(i_t\) и \(x_t\) (\(1 \le i_t \le n\), \(1 \le x_t \le 200\,000\)) — позицию и новое значение.

Выходные данные

Выведите \(q+1\) целое число — ответ для изначальной последовательности и ответ после каждого изменения.


Примеры
Входные данныеВыходные данные
1 5 6
1 2 1 2 1
2 1
4 1
5 3
2 3
4 2
2 1
2
1
0
0
2
3
0

time 5000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя