사하르나의 계단
시간 제한0.2초메모리 제한128 MB
수열을 k개의 서로 겹치지 않는 비감소 부분수열로 나눌 때 선택할 수 있는 원소 수의 최댓값을 구하고, 모든 원소 n개를 다 쓰게 되는 k까지 각 k에 대한 값을 출력한다.
문제
몰도바의 사하르나(Saharna)는 동굴과 폭포로 이름난 아름다운 명소로, 그곳에서는 다양한 모양과 크기의 돌을 찾을 수 있다. 중세 시대에는 이 돌들로 요새의 계단을 쌓았으며, 계단의 각 단은 원칙적으로 돌 하나로 만들어졌다.
돌은 무거워서 정해진 순서대로 한 줄로 고정되어 놓여 있다. 각 돌의 높이는 알려져 있어, 정수 수열 로 주어진다. 여기서 는 번째 돌의 높이이다.
계단을 만들 때 장인은 돌들을 놓인 순서대로 훑으면서 각 단에 쓸 돌을 하나씩 고른다. 단, 새로 고르는 돌의 높이는 바로 직전에 고른 돌의 높이보다 낮아서는 안 된다. 즉, 하나의 계단은 (원래 순서를 유지하는) 높이가 비내림차순인 부분수열이다.
예를 들어 일 때, 아래에서 밑줄 친 돌들로 하나의 계단을 만들 수 있다.
돌을 더 많이 쓸수록 더 좋은 성을 지을 수 있으므로, 장인은 가능한 한 많은 돌을 사용하려 한다.
를, 각각 최소 한 단 이상을 가지며 서로 겹치지 않게 돌을 나누어 쓰는 개의 계단에 사용할 수 있는 돌의 최대 개수라고 정의한다.
위 예시에서 이며, 밑줄 친 돌들이 최적의 계단 하나를 이룬다.
마찬가지로 임을 확인할 수 있다. 아래 그림에서 첫 번째 계단의 돌은 한 줄 밑줄(), 두 번째 계단의 돌은 두 줄 밑줄()로 표시했다.
일 때 첫 번째 계단에는 6개, 두 번째 계단에는 3개의 돌이 쓰인다.
계단을 3개 만들 때 사용할 수 있는 돌의 최대 개수는 아래와 같다.
세 줄 밑줄은 세 번째 계단을 나타내며, 나머지 표시는 앞과 같은 의미이다. 따라서 이다. 일 때 첫 번째 계단에 5개, 두 번째 계단에 4개, 세 번째 계단에 3개의 돌이 쓰인다. 에서 고른 첫 번째·두 번째 계단은 일 때 고른 계단과 다를 수 있음에 유의하라.
를 으로 늘려 가면 어떤 값 에서 이 된다. 여기서 은 돌의 총 개수이다.
주어진 높이 수열 에 대해 각각에 대한 를 계산하는 프로그램을 작성하라.
입력
첫째 줄에 양의 정수 이 주어진다. 둘째 줄에 개의 양의 정수 이 공백으로 구분되어 주어진다.
출력
개의 줄을 출력한다. 번째 줄에는 의 값을 출력한다(). 여기서 는 을 만족하는 가장 작은 값이다.