만드는 중입니다

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

수열 지우기

시간 제한2초메모리 제한1024 MB

요약
수열 A를 연속된 구간으로 나누어 각 구간 mex 값의 나열이 사전순으로 가장 크도록 만들고, 그 결과 수열 B를 출력합니다.
난이도

보통10점 중 7점

유형
그리디, 배열, 구현
정답자
아직 제출이 없습니다

문제

누구나 집합의 가장 작은 값과 가장 큰 값을 돌려주는 함수 min⁡\min과 max⁡\max를 안다. 이제 수의 집합에 적용하면 집합에 속하지 않는 가장 작은 음이 아닌 정수를 돌려주는 함수 mex\text{mex}를 살펴보자. 이름은 minimal excluded에서 왔다. 예를 들어 mex({1,2,3})=0\text{mex}(\{1,2,3\}) = 0이고 mex({0,1,2,4,5})=3\text{mex}(\{0,1,2,4,5\}) = 3이다. Magnus는 mex의 정의를 알게 된 뒤 바로 이를 바탕으로 한 게임을 만들었다. 플레이어는 N개의 음이 아닌 정수로 이루어진 수열 A를 받고, A에 원소가 남아 있는 동안 다음 과정을 반복해서 수열 B를 만든다. (1) A의 길이를 넘지 않는 양의 정수 k를 고른다. (2) A의 처음 k개 원소의 mex를 B의 끝에 추가한다. (3) A에서 처음 k개 원소를 삭제한다. 플레이어의 과제는 매 단계마다 k를 골라, 가능한 모든 선택 중에서 결과로 얻는 수열 B가 사전순으로 가장 크도록 하는 것이다. 수열 x=x1,x2,…,xnx = x_1, x_2, \ldots, x_n이 수열 y=y1,y2,…,ymy = y_1, y_2, \ldots, y_m보다 사전순으로 크다는 것은, i≤ni \le n이고 i≤mi \le m이며 x1=y1x_1 = y_1, x2=y2x_2 = y_2, …\ldots, xi−1=yi−1x_{i-1} = y_{i-1}이고 xi>yix_i > y_i인 ii가 존재하거나, n>mn > m이고 x1=y1x_1 = y_1, x2=y2x_2 = y_2, …\ldots, xm=ymx_m = y_m인 경우를 말한다.

입력

첫 줄에 수열 AA의 길이 NN (1≤N≤500,0001 \le N \le 500,000)이 주어진다. 둘째 줄에는 NN개의 원소 AiA_i (0≤Ai≤N0 \le A_i \le N)가 공백으로 구분되어 주어진다.

출력

첫 줄에 찾은 수열 BB의 길이 MM을 출력한다. 둘째 줄에는 B1,B2,…,BMB_1, B_2, \ldots, B_M을 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

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

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