Фрагментація
Фелікс працює над проєктом у гаражі. Він уже придумав вражаючу назву для свого проєкту: SuperFastZilla. Хоча він ще не знає, що саме має робити SuperFastZilla, він упевнений, що це має бути дуже швидко.
Одного разу Фелікс зауважив, що SuperFastZilla працює занадто повільно, навіть попри використання швидких алгоритмів. Він підозрює, що проблема може бути пов'язана з фрагментацією пам'яті.
Пам'ять у SuperFastZilla складається з n блоків. SuperFastZilla виконує певні операції з пам'яттю, і кожен блок бере участь лише в одній операції: i-ий блок використовується в a[i]
-ій операції.
Фелікс хоче відсортувати ці блоки за індексами операцій. Щоб зробити це швидше, він прагне розділити пам'ять на мінімальну кількість послідовних блоків, а потім переставити ці сегменти так, щоб отримати відсортований масив блоків. Після перегрупування порядок індексів операцій на блоках має бути не спадним.
Допоможіть Феліксу розбити пам'ять так, щоб мінімізувати кількість сегментів.
Наприклад, якщо a = [2, 3, 1, 1, 2, 2, 1], то її можна розбити на три частини: [2, 3], [1, 1, 2, 2] і [1]. Ці частини можна переставити, отримавши відсортований масив: [1], [1, 1, 2, 2], [2, 3].
Вхідні дані
Перший рядок містить число n (1 ≤ n ≤ 10^5
). Наступний рядок містить n цілих чисел a[i]
(1 ≤ a[i]
≤ 10^5
).
Вихідні дані
Перший рядок містить ціле число m - найменшу кількість сегментів. Наступний рядок містить m чисел - довжини відрізків у порядку зліва направо.