아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

순열의 슈퍼수

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

요약
순열이 주어질 때, 가장 긴 증가 부분 수열에 포함되는 모든 값을 오름차순으로 찾아 출력한다.
난이도

보통10점 중 7점

유형
동적 계획법, 이분 탐색, 정렬
정답자
아직 제출이 없습니다

문제

nn개의 원소로 이루어진 순열이란 집합 {1, 2, ..., nn}에 속하는 서로 다른 수들을 나열한 길이 nn의 수열입니다. 예를 들어 수열 2, 1, 4, 5, 3은 원소가 5개인 순열입니다.

이 문제에서는 순열의 가장 긴 증가하는 부분수열에 주목합니다. 위 예시 순열에서 가장 긴 증가하는 부분수열의 길이는 3이며, 그러한 부분수열은 2, 4, 5와 1, 4, 5로 정확히 두 개 있습니다.

가장 긴 증가하는 부분수열 중 어느 하나에라도 속하는 수를 슈퍼수라고 부릅니다. 순열 2, 1, 4, 5, 3에서 슈퍼수는 1, 2, 4, 5이고, 수 3은 슈퍼수가 아닙니다.

주어진 순열에 대해 모든 슈퍼수를 찾는 것이 여러분의 과제입니다.

다음을 수행하는 프로그램을 작성하세요.

  • 표준 입력에서 순열을 읽어 들이고,
  • 모든 슈퍼수를 찾은 뒤,
  • 찾은 슈퍼수를 표준 출력에 출력합니다.

입력

입력은 두 줄로 이루어집니다. 첫째 줄에는 정수 nn (1≤n≤1000001 \le n \le 100000)이 하나 주어집니다. 둘째 줄에는 원소가 nn개인 순열을 이루는 nn개의 정수가 공백 하나로 구분되어 주어집니다.

출력

출력은 두 줄로 이루어집니다. 첫째 줄에는 입력 순열에 있는 슈퍼수의 개수 mm을 출력합니다. 둘째 줄에는 슈퍼수들을 증가하는 순서로 공백 하나로 구분하여 출력합니다.

예제1

  1. 예제 1

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