만드는 중입니다

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

Empodia 2의 또 다른 문제

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

요약
길이 n인 순열의 앞 k개 값이 주어졌을 때 나머지 값을 채워 framed interval의 개수를 최대로 만들고, 그 개수와 최적의 순열을 출력합니다.
난이도

어려움10점 중 9점

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

문제

길이 nn의 순열 p1,p2,…,pnp_1, p_2, \ldots, p_n에 대해, 연속 부분 수열 pl,pl+1,…,prp_l, p_{l+1}, \ldots, p_r (1≤l≤r≤n1 \le l \le r \le n)이 max⁡k=lrpk−min⁡k=lrpk=r−l\max_{k=l}^{r} p_k - \min_{k=l}^{r} p_k = r - l을 만족하면 이를 프레임 구간(framed interval)이라고 부른다. 예를 들어 [7,8,9][7, 8, 9], [3,1,5,4,2][3, 1, 5, 4, 2], [4,3][4, 3], [2][2]는 프레임 구간이다. [3,5][3, 5]와 [5,3][5, 3]은 프레임 구간이 아니다.

구사과는 길이 nn의 순열을 잡고, pl,…,prp_l, \ldots, p_r이 프레임 구간을 이루는 순서쌍 (l,r)(l, r) (1≤l≤r≤n1 \le l \le r \le n)의 개수를 세고 있었다.

하지만 서울대학교 화학부 종신교수 윤창기가 순열을 불태워버렸다. 불태운 뒤에는 순열의 앞 kk개 수만 남았다.

구사과를 도와 주자. 순열의 맨 앞 kk개 원소가 주어졌을 때, 나머지 수를 최적으로 채워 프레임 구간의 개수를 최대화하고, 그러한 순열 중 하나를 아무거나 출력해야 한다.

입력

첫 번째 줄에 두 정수 n,kn, k가 주어진다. (1≤n≤200 0001 \le n \le 200\,000, 0≤k≤n0 \le k \le n)

두 번째 줄에 kk개의 정수 pip_i가 주어진다. (1≤pi≤n1 \le p_i \le n) k=0k = 0이면 이 줄은 빈 줄로 주어진다.

모든 pip_i는 서로 다르다.

출력

첫 번째 줄에 가능한 프레임 구간의 최대 개수를 하나의 정수로 출력한다.

두 번째 줄에 최적 순열을 이루는 nn개의 정수를 출력한다. 순열의 앞 kk개 원소는 입력과 일치해야 한다.

예제1

  1. 예제 1

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