Технокубок 2016 - Отборочный Раунд 2
D
Дефрагментация памяти
Codeforces
1600
原题
← CE →
翻译中…

Память компьютера состоит из $*n*$ ячеек, которые выстроены в ряд. Пронумеруем ячейки от $1$ до $*n*$ слева направо. Про каждую ячейку известно, свободна она или принадлежит какому-либо процессу (в таком случае известен процесс, которому она принадлежит).

翻译中…

Для каждого процесса известно, что принадлежащие ему ячейки занимают в памяти непрерывный участок. С помощью операций вида «переписать данные из занятой ячейки в свободную, а занятую теперь считать свободной» требуется расположить все принадлежащие процессам ячейки в начале памяти компьютера. Другими словами, любая свободная ячейка должна располагаться правее (иметь больший номер) любой занятой.

翻译中…

Вам необходимо найти минимальное количество операций переписывания данных из одной ячейки в другую, с помощью которых можно достичь описанных условий. Допустимо, что относительный порядок ячеек в памяти для каждого из процессов изменится после дефрагментации, но относительный порядок самих процессов должен остаться без изменений. Это значит, что если все ячейки, принадлежащие процессу $*i*$, находились в памяти раньше всех ячеек процесса $*j*$, то и после перемещений это условие должно выполняться.

翻译中…

Считайте, что номера всех процессов уникальны, хотя бы одна ячейка памяти занята каким-либо процессом.

翻译中…

Input

翻译中…

В первой строке входных данных записано число $*n*$ ($1 ≤ *n* ≤ 200 000$) — количество ячеек в памяти компьютера.

翻译中…

Во второй строке входных данных следуют $*n*$ целых чисел $*a*_{1}, *a*_{2}, ..., *a*_{*n*}$ ($1 ≤ *a*_{*i*} ≤ *n*$), где $*a*_{*i*}$ равно либо $0$ (это означает, что $*i*$-я ячейка памяти свободна), либо номеру процесса, которому принадлежит $*i*$-я ячейка памяти. Гарантируется, что хотя бы одно значение $*a*_{*i*}$ не равно $0$.

翻译中…

Процессы пронумерованы целыми числами от $1$ до $*n*$ в произвольном порядке. При этом процессы не обязательно пронумерованы последовательными числами.

翻译中…

Output

翻译中…

Выведите одно целое число — минимальное количество операций, которое нужно сделать для дефрагментации памяти.

翻译中…

Note

翻译中…

В первом тестовом примере достаточно двух операций:

翻译中…
  1. Переписать данные из третьей ячейки в первую. После этого память компьютера примет вид: $2 2 0 1$.
  2. Переписать данные из четвертой ячейки в третью. После этого память компьютера примет вид: $2 2 1 0$.
翻译中…

样例

Input #1
4
0 2 2 1
Output #1
2
Входные данныеCopy Выходные данныеCopy
Input #2
8
0 8 8 8 0 4 4 2
Output #2
4
Входные данныеCopy Выходные данныеCopy
标签
构造
贪心
模拟

题面与样例版权归 Codeforces 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。