Огряче сортування
Обмеження: 3 сек., 512 МіБ
Що станеться, якщо накласти прокляття огра на модуль оперативної
пам’яті? Виявляється, вона може циклічно переміщувати довільні
послідовності даних ефективним способом, але лише вночі.
Знайдіть мінімальну ціну (та коректну послідовність ходів), необхідну
для впорядкування перестановки v
довжини n. Усі елементи
перестановки мають індекси від 1 до n.
Єдиний дозволений тип ходу полягає в тому, щоб узяти елемент з деякої позиції x і вставити його в іншу позицію y, зміщуючи всі елементи між ними на одну позицію. Вартість такого ходу дорівнює y.
Формально, хід бере елемент зі значенням t із позиції x, звільняючи індекс x. Потім решта елементів у v зсуваються таким чином, що звільнена позиція стає y. Після цього t вставляється у звільнену позицію з індексом y.
Наприклад, якщо ми маємо перестановку [4, 3, 2, 1], можливі деякі ходи:
x=2, y=4, в результаті отримаємо — [4, 2, 1, 3], вартість ходу — 4.
x=2, y=1, в результаті отримаємо — [3, 4, 2, 1], вартість ходу — 1.
Вхідні дані
У першому рядку задано одне ціле число n — розмір перестановки.
У другому рядку задано n цілих чисел v1,v2,…,vn — перестановку.
Вихідні дані
У першому рядку виведіть два цілих числа min_cost та len_moves — мінімальну ціну, необхідну щоб впорядкувати перестановку та кількість ходів необхідну для цього.
у наступних len_moves рядках виведіть по два цілих числа xk, yk. Вони описуватимуть, що на k-тому ході елемент з позиції xk перейде до позиції yk (1≤k≤len_moves, 1≤xk,yk≤n).
Якщо існує декілька можливих послідовностей ходів, ви можете вивести будь-яку з них. Зверніть увагу, що вам не потрібно мінімізувати кількість ходів, лише загальну вартість. Можна показати, що послідовність ходів для впорядкування перестановки існує завжди.
Обмеження
1≤n≤3⋅105,
1≤vi≤n,
vi≠vj для всіх 1≤i<j≤n.
Приклади
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
4 1 2 4 3 | 3 1 4 3 |
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
5 2 4 1 3 5 | 3 2 4 2 4 1 |
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
3 1 2 3 | 0 0 |
Примітки
У першому прикладі, одним ходом можна поміняти місцями елементи на позиціях 3 та 4.
У другому прикладі, перестановка після першого ходу матиме вигляд [2,3,4,1,5].
У третьому прикладі, перестановка вже є посортованою, отже отримальна ціна рівна нулю і не потрібно робити жодного ходу.