static int n, m, k;
static boolean[] hasCard;
static int[] nextCard;
static StringBuilder sb = new StringBuilder();
static Queue<Integer> compressionQueue = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
hasCard = new boolean[n + 1];
nextCard = new int[n + 1];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m; i++) {
hasCard[Integer.parseInt(st.nextToken())] = true;
}
for (int i = n - 1; i > 0; i--) {
nextCard[i] = hasCard[i + 1] ? i + 1 : nextCard[i + 1];
}
st = new StringTokenizer(br.readLine());
for (int i = 0; i < k; i++) {
play(Integer.parseInt(st.nextToken()));
}
System.out.println(sb);
}
private static void play(int cheolsuCard) {
int chosenCard = nextCard[cheolsuCard];
compressionQueue.add(chosenCard);
while (!hasCard[chosenCard]) {
chosenCard = nextCard[chosenCard];
compressionQueue.add(chosenCard);
}
while (!compressionQueue.isEmpty()) {
nextCard[compressionQueue.poll()] = nextCard[chosenCard];
}
hasCard[chosenCard] = false;
sb.append(chosenCard).append('\n');
}
출처:https://www.acmicpc.net/problem/16566
