Изменения
Нет описания правки
Заметим, что всем префиксом на каждом шаге будет соответствовать диапазон номеров одинакового размера, (так как количество перестановок не зависит от префикса) то есть можем просто посчитать "количество диапозонов, которые идут до нас" (количество цифр уже полностью занятых перестановками с меньшим номером) за <tex>O(1) </tex>:
*'''pf[n]''' {{---}} количество перестановок размера <tex>n</tex>
*'''permutation[n]''' {{---}} искомая перестановка
*мы должны поставить ту цифру, которая еще полностью не занята, то есть ('''alreadyWas''' + 1) - ую, которой еще нет в нашем префиксе, считаем, что это цифра '''j'''
'''for''' i = 1 '''to''' n '''do''' '''{'''
alreadyWas = (numOfPermutation - 1) div pf[n-i] numOfPermutation = ((numOfPermutation - 1) mod pf[n-i] ) + 1
ans[i] = j (посчитаем за O(n))
теперь j-ый элемент занят (находится в нашем префиксе)