题目描述
给定一个 (1, 2, …, N) 的排列 A=(A1, A2, …, AN)。
对于满足 1≤L≤R≤N 的整数对 (L, R),定义 f(L, R) 为将 A 的第 L 个到第 R 个元素反转后得到的排列。
这里,“将 A 的第 L 个到第 R 个元素反转”是指将 AL,AL+1,…,AR−1,AR 同时替换为 AR,AR−1,…,AL+1,AL。
满足 1≤L≤R≤N 的 (L, R) 的选法共有 2N(N+1) 种。
请将所有这样的 (L, R) 对应的排列 f(L, R) 全部枚举出来,并按字典序排序,输出第 K 个排列。
数列的字典序定义如下:对于数列 S=(S1,S2,…,S∣S∣) 和 T=(T1,T2,…,T∣T∣),若满足以下 1. 或 2.,则称 S 的字典序小于 T。其中 ∣S∣, ∣T∣ 分别表示 S, T 的长度。
- ∣S∣<∣T∣ 且 $(S\_1,S\_2,\ldots,S\_{|S|}) = (T\_1,T\_2,\ldots,T\_{|S|})$。
- 存在整数 1≤i≤min{∣S∣, ∣T∣},满足以下两点:
- $(S\_1,S\_2,\ldots,S\_{i-1}) = (T\_1,T\_2,\ldots,T\_{i-1})$
- Si 比 Ti 小(按数值比较)。
输入格式
输入按以下格式从标准输入读入。
N K A1 A2 … AN
输出格式
设按字典序排序后,第 K 个排列为 B=(B1,B2,…,BN)。
请按如下格式输出 B:
B1 B2 … BN
样例 1
输入
3 5
1 3 2
输出
2 3 1
样例 2
输入
5 15
1 2 3 4 5
输出
5 4 3 2 1
样例 3
输入
10 37
9 2 1 3 8 7 10 4 5 6
输出
9 2 1 6 5 4 10 7 8 3
说明/提示
数据范围
- 1≤N≤7000
- 1≤K≤2N(N+1)
- A 是 (1, 2, …, N) 的一个排列
样例解释 1
将所有满足 1≤L≤R≤3 的 (L, R) 对应的排列 f(L, R) 枚举如下:
- f(1,1)=(1,3,2)
- f(1,2)=(3,1,2)
- f(1,3)=(2,3,1)
- f(2,2)=(1,3,2)
- f(2,3)=(1,2,3)
- f(3,3)=(1,3,2)
将它们按字典序排序后,第 5 个排列是 f(1,3)=(2,3,1),因此输出该排列。
样例解释 2
答案为 f(1,5)。
由 ChatGPT 4.1 翻译