Author: | A. Baranov | Time limit: | 1 sec | |
Input file: | Standard input | Memory limit: | 256 Mb | |
Output file: | Standard output |
There are two integer arrays A and B, of length N each.
Your program must generate lexicographically minimal permutation of A, satisfying conditions:
Ai ≤ Bi, i = 1, 2, …, N
Input contains integer N, followed by 2 ⋅ N integers: array A, then array B.
Output must contain N integers — resulting permutation.
If the solution does not exist, output a single number − 1.
0 ≤ Ai, Bi ≤ 109, 1 ≤ N ≤ 2 ⋅ 105
No. | Standard input | Standard output |
---|---|---|
1 |
|
|
2 |
|
|
Дополним элементы массива B номерами их индексов. Полученные в результате пары {значение, индекс} будем называть корзинами.
Отсортируем массивы A и B по убыванию значений. Заведем изначально пустое множество Q, предназначенное для хранения корзин.
Выберем наибольший элемент Ai и извлечем из B все корзины, значения которых позволяют вместить в них такой элемент.
Все извлеченные корзины из B перекладываем в Q.
Далее среди отложенных корзин из Q выберем ту, у которой индекс максимально возможный.
Таким образом, элементы из A, которые могли бы поместиться в те же корзины, что и Ai,
но имеющие меньшие значения, окажутся в более ранних позициях.
Если в качестве Q использовать двоичную кучу,
получим сложность алгоритма равную O(N ⋅ log(N)).