Не тягніть інтригу
Limits: 2 sec., 256 MiB
Олімпіада завершилася — напружені чотири години позаду. Школярі діляться своїми враженнями та розв’язками з учителями та суперниками. Та найцікавіше їм дізнатися, скільки балів набрали інші учасники, щоб оцінити свої шанси потрапити на відбір на Всеукраїнську учнівську олімпіаду з інформатики. Турнірна таблиця, звісно, стає доступною не відразу після змагань. Учасники дружно йдуть на закриття, щоб там почути результати.
Нехай \(n\) — кількість учасників олімпіади. Вони мають номери від 1 до \(n\). Тоді турнірну таблицю можна подати перестановкою \(p\) чисел від 1 до \(n\). Переможцем олімпіади є учасник з номером \(p_1\), друге місце зайняв учасник \(p_2\), почесна бронза в учасника \(p_3\), щасливе четверте місце в учасника \(p_4\) і т. д.
Замість того, щоб одразу повідомити учасникам перестановку \(p\), організатори хочуть підігріти цікавість юних алгоритмістів і ще трошки потягнути інтригу. Вони порахували масив \(a\) з \(n\) елементів, де елемент \(a_k\) — це кількість інверсій на префіксі довжини \(k\). Цей масив вони й покажуть на проєкторі на закритті.
Формально для кожного \(k\) вам відомо кількість пар індексів \((i, j)\) таких, що \(1 \le i < j \le k\) і \(p_i > p_j\) — кількість інверсій на префіксі довжини \(k\).
Зеник і Марічка легко змогли відновити всю перестановку \(p\) за заданою інформацією. А ви зможете?
Input
У першому рядку задано ціле число \(n\) — кількість учасників олімпіади.
Другий рядок містить \(n\) цілих чисел \(a_k\) — елементи масиву \(a\), який організатори повідомили учасникам на закритті.
Output
В одному рядку виведіть \(n\) цілих чисел \(p_i\) — перестановку учасників у турнірній таблиці.
Constraints
\(1 \le n \le 2 \cdot 10^5\),
організатори ніколи не помиляються, а отже гарантовано правильно порахували елементи масиву \(a\).
Оцінювання задачі складається із наступних блоків:
1 бал — приклад з умови,
9 балів — \(n \le 10^3\),
15 балів — без додаткових обмежень.
Бали за блок ви отримаєте лише якщо дасте правильну відповідь на всі тести з блоку.
Samples
Input (stdin) | Output (stdout) |
---|---|
5 0 1 2 4 7 | 5 1 4 3 2 |
Notes
У прикладі \(p=(5, 1, 4, 3, 2)\).
Пара \((3, 4)\) є інверсією, бо \(3<4\) і \(p_3 > p_4\) (\(p_3=4, p_4=3\)). Пара \((2, 5)\) не є інверсією, бо \(p_2 < p_5\) (\(p_2 = 1, p_5 = 2\)).
Усього в перестановці є сім інверсій: \((1, 2)\), \((1, 3)\), \((1, 4)\), \((1, 5)\), \((3, 4)\), \((3, 5)\), \((4, 5)\).
Префікс \((5)\) не містить жодної інверсії.
Префікс \((5, 1)\) містить одну інверсію \((1, 2)\).
Префікс \((5, 1, 4)\) містить дві інверсії \((1, 2)\) та \((1, 3)\).
Префікс \((5, 1, 4, 3)\) містить чотири інверсії \((1, 2)\), \((1, 3)\), \((1, 4)\), \((3, 4)\).
Уся перестановка містить сім інверсій.
Element Type | Created | Who | Problem | Compiler | Result | Time (sec.) | Memory (MiB) | # | Actions |
---|