탐욕적 증가 부분수열

면접 대비

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

요약
순열이 주어질 때 이전에 고른 값보다 큰 원소 중 가장 왼쪽에 있는 것을 반복해서 골라 만들어진 부분 수열을 출력한다.
난이도

보통10점 중 4점

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

문제

1,2,…,N1, 2, \dots, N의 순열 A=(a1,a2,…,aN)A = (a_1, a_2, \dots, a_N)이 주어질 때, 탐욕적 증가 부분수열(GIS)을 다음과 같이 정의한다.

g1=a1g_1 = a_1이라 하자. i>1i > 1인 각 ii에 대해, gig_i는 AA에서 gi−1g_{i-1}보다 큰 수 중 가장 왼쪽에 있는 수라 하자. 만약 주어진 ii에 대해 그러한 수가 없다면, 수열의 GIS는 (g1,g2,…,gi−1)(g_1, g_2, \dots, g_{i-1})이라 한다.

순열 AA가 주어질 때, AA의 GIS를 구하시오.

입력

입력의 첫째 줄에는 순열 AA의 원소 개수를 나타내는 정수 1≤N≤1061 \le N \le 10^6이 주어진다. 다음 줄에는 11과 NN 사이의 서로 다른 정수 NN개, 즉 순열 AA의 원소 a1,…,aNa_1, \dots, a_N이 주어진다.

출력

먼저 AA의 GIS의 길이 ll을 한 줄에 출력한다. 그다음 ll개의 정수를 GIS의 원소 순서대로 출력한다.

예제3

  1. 예제 1

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

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

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