접두사 중앙값

시간 제한1초메모리 제한128 MB

요약
1부터 2N-1까지의 순열에서 얻은 접두 중앙값 배열 B가 주어질 때, 같은 중앙값을 내는 순열 중 사전순으로 가장 작은 것을 복원한다.
난이도

어려움10점 중 8점

유형
그리디, 구현, 정렬, 완전 탐색
정답자
아직 제출이 없습니다

문제

AA를 1,2,3,…,2N−11, 2, 3, \ldots, 2N-1의 순열이라고 하자.

AA의 접두사 중앙값은 NN개의 원소를 가진 배열 BB로 정의하며, BiB_i는 앞의 2i−12i-1개 원소 A1,A2,…,A2i−1A_1, A_2, \ldots, A_{2i-1}의 중앙값이다.

원소가 MM개인 목록(단, MM은 홀수)의 중앙값은 목록을 정렬했을 때 한가운데에 오는 값이다.

NN과 배열 BB가 주어질 때, 접두사 중앙값이 정확히 BB가 되는 순열 AA를 복원하여라.

입력

첫째 줄에 정수 NN이 주어진다.

둘째 줄에 NN개의 정수 B1,B2,…,BNB_1, B_2, \ldots, B_N이 공백으로 구분되어 주어진다.

출력

AA를 2N−12N-1개의 정수로 이루어진 한 줄로, 공백으로 구분하여 출력한다.

같은 배열 BB를 만드는 순열이 여러 개일 수 있다. 그 중 사전순으로 가장 앞서는 순열을 출력한다. 유효한 순열이 적어도 하나 존재함이 항상 보장된다.

제한

  • 1≤N≤100 0001 \le N \le 100\,000
  • 모든 ii (1≤i≤N1 \le i \le N)에 대해 1≤Bi≤2N−11 \le B_i \le 2N-1
  • 접두사 중앙값이 BB인 순열 AA가 항상 존재함이 보장된다.

예제5

  1. 예제 1

    입력
    5
    1 3 3 4 5
    
    예상 출력
    1 3 4 2 5 6 7 8 9
    
  2. 예제 2

    입력
    1
    1
    
    예상 출력
    1
    
  3. 예제 3

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

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

    입력
    3
    5 3 3
    
    예상 출력
    5 1 3 2 4