eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Фрагментация

Фрагментация

Феликс работает над проектом в гараже. Он уже нашел впечатляющее название для своего проекта: SuperFastZilla. К настоящему моменту он не знает что SuperFastZilla должен делать, однако уверен, что он должен делать это быстро, очень быстро

Однажды он заметил, что SuperFastZilla работает слишком медленно, несмотря на быстрые алгоритмы, используемые в нем. Феликс считает, что проблема может быть вызвана фрагментацией памяти.

Память в SuperFastZilla состоит из n блоков. SuperFastZilla выполняет некоторые операции над памятью. Каждый блок использует только одну операцию, i-ый блок используется в ai-ой операции.

Феликс хочет отсортировать эти блоки по индексу используемой операции. Чтобы сделать это быстрее, Феликс хочет разделить память на минимальное количество последовательных блоков, после чего переставить эти сегменты так, чтобы получить отсортированный массив блоков. После перегруппировки порядок индексов операций на блоках должен быть неубывающим.

Помогите Феликсу разбить память так чтобы минимизировать количество сегментов.

Например, если a = [2, 3, 1, 1, 2, 2, 1], то его можно разбить на три части: [2, 3], [1, 1, 2, 2] и [1]. Эти части можно переставить, получив отсортированный массив: [1], [1, 1, 2, 2], [2, 3].

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

Первая строка содержит число n (1n105). Следующая строка содержит n целых чисел ai (1ai105).

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

Первая строка содержит целое число m - наименьшее количество сегментов. Следующая строка содержит m чисел - длины отрезов в порядке слева направо.

Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
7
2 3 1 1 2 2 1
Выходные данные #1
3
2 4 1 
Источник 2014 ACM NEERC, Northern Subregion, November 8, Problem F