Разбор
Пусть — заданная перестановка. Ее применение означает перенос элемента из позиции в позицию , то есть происходит преобразование . Обратной для будет такая перестановка , для которой имеет место обратное преобразование . То есть в массиве на -ом месте должно стоять число .
Пример
Изобразим прямую и обратную перестановки. В обратной перестановке ребра ориентированы в другую сторону.
Реализация алгоритма
Массив хранит входную перестановку, массив хранит обратную.
#define MAX 20010 int p[MAX], pi[MAX];
Читаем входную перестановку.
scanf("%d",&n); for(i = 1; i <= n; i++) scanf("%d",&p[i]);
Вычисляем обратную перестановку.
for(i = 1; i <= n; i++) pi[p[i]] = i;
Выводим обратную перестановку.
for(i = 1; i <= n; i++) printf("%d ",pi[i]); printf("\n");
Python реализация
Список хранит входную перестановку, список хранит обратную. Читаем входные данные.
n = int(input()) p = [0] + list(map(int, input().split())) pi = [0] * (n + 1)
Вычисляем обратную перестановку.
for i in range(1, n + 1): pi[p[i]] = i
Выводим обратную перестановку.
for i in range(1, n + 1): print(pi[i], end=" ") print()