만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

역전 쌍 통찰

시간 제한0.5초메모리 제한2048 MB

요약
N과 K가 주어질 때, 역전 쌍(inversion) 개수로 정렬하고 같으면 사전순으로 나열한 목록에서 K번째 순열을 구합니다.
난이도

보통10점 중 7점

유형
조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

MathemIsland에는 다양한 생물이 살고 있다. 뿌리, 나무, 나뭇잎, 비둘기처럼 수학 책에서 볼 법한 것이 모두 있다. 어디를 보든 순열이 있다.

ICPC 대학교는 이 순열들을 체계적으로 분류하는 방법을 마련했다. 생물 유전학 연구에서는 역전 쌍의 개수가 특히 중요하므로, 1부터 NN까지의 정수로 만들 수 있는 N!N!개의 순열을 먼저 역전 쌍의 개수 순으로, 개수가 같으면 사전순으로 정렬한다. 이렇게 하면 각 순열마다 1부터 N!N!까지의 정수가 하나씩 정해지며, 그 정수는 정렬된 N!N!개 목록에서 해당 순열의 위치를 뜻한다.

역전 쌍이 0개인 순열은 항등 순열 (1,2,…,N)(1, 2, \dots, N)뿐이므로 번호는 11이다. 역전 쌍이 가장 많은 순열은 역순 (N,N−1,…,1)(N, N-1, \dots, 1)뿐이므로 번호는 N!N!이다.

ICPC 대학교 데이터베이스를 구축하는 팀의 일원으로서, 번호로 순열을 찾아내는 프로그램을 작성한다. 두 정수 NN과 KK가 주어지면, 번호 KK에 해당하는 1부터 NN까지의 정수 순열을 출력한다.

순열에서 역전 쌍이란 본래 순서에서 벗어난 원소의 쌍을 말한다. NN개의 원소로 이루어진 순열 π\pi의 역전 쌍 개수 inv(π)\text{inv}(\pi)는 다음과 같이 정의한다.

inv(π)=∣{(i,j):1≤i<j≤N∧π(i)>π(j)}∣\text{inv}(\pi) = |\{(i, j) : 1 \le i < j \le N \land \pi(i) > \pi(j)\}|

입력

첫 줄에 두 정수 NN(1≤N≤2⋅1051 \le N \le 2 \cdot 10^5)과 KK(1≤K≤min⁡(N!,4⋅1018)1 \le K \le \min(N!, 4 \cdot 10^{18}))이 주어진다.

출력

한 줄에 NN개의 정수를 출력한다. 대학의 정렬 기준에서 KK번째에 해당하는, 1부터 NN까지 정수의 순열이다.

예제3

  1. 예제 1

    입력
    4 10
    
    예상 출력
    1 4 3 2
    
  2. 예제 2

    입력
    5 120
    
    예상 출력
    5 4 3 2 1
    
  3. 예제 3

    입력
    16 12345678901234
    
    예상 출력
    2 13 8 10 3 15 16 5 11 12 1 9 7 6 14 4