<aside> 💛
백준 1722번
</aside>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Practice81 {
public static void main(String[] args) throws IOException{
int N, Q;
long F[] = new long[21];
int S[] = new int[21];
boolean visited[] = new boolean[21];
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
st = new StringTokenizer(bf.readLine());
Q = Integer.parseInt(st.nextToken());
F[0] = 1;
for(int i = 1; i <= N; i++) {
F[i] = F[i - 1] * i;
}
int cnt;
if(Q == 1) {
long K = Long.parseLong(st.nextToken());
for(int i = 1; i <= N; i++) {
cnt = 1;
for(int j = 1; j <= N; j++) {
if(visited[j])
continue;
if(K <= cnt * F[N - i]) {
K -= ((cnt - 1) * F[N - i]);
S[i] = j;
visited[j] = true;
break;
}
cnt++;
}
}
for(int i = 1; i <= N; i++) {
System.out.print(S[i] + " ");
}
}else {
long K = 1;
for(int i = 1; i <= N; i++) {
S[i] = Integer.parseInt(st.nextToken());
long cnt2 = 0;
for(int j = 1; j < S[i] ; j++) {
if(visited[j] == false) {
cnt2++;
}
}
K += cnt2 * F[N - i];
visited[S[i]] =true;
}
System.out.println(K);
}
}
}