정수로 이루어진 수열 에서, 다음 조건을 만족하는 가장 긴 의 길이를 구하는 프로그램을 작성하시오.
- 는 자신 또는 연속하는 부분으로 만들어진 수열이다.
- 의 홀수 위치만 따서 만든 수열은 증가 수열이다.
- 의 짝수 위치만 따서 만든 수열은 감소 수열이다.
조건 2, 3이 의 길이가 꼭 짝수라는 것을 뜻하는 것이 아니라는 데 유의하시오.
예를 들어, 일 때 의 맨 처음과 마지막을 제거하여 을 만들면, 홀수 위치는 , 짝수 위치는 이 되어 모든 조건을 만족함을 알 수 있으며, 조건을 만족하면서 이보다 더 긴 경우는 찾을 수 없다.
만약, 이라면, 자체로 이 조건을 만족함을 알 수 있다.
입력 형식
첫 줄에 수열 의 크기를 나타내는 정수 이 주어진다. ()
그다음 줄에 수열 의 구성을 나타내는 개의 정수 이 공백으로 구분되어 주어진다. ( 는 서로 다름)
출력 형식
첫 줄에 조건을 만족하는 가장 긴 의 길이를 출력한다.
예제 1
입력
10 10 2 9 3 8 4 7 5 6 1
출력
8
예제 2
입력
4 1 2 3 4
출력
3
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 23점
종류 2: 47점
종류 3: 30점
추가적인 제한 조건이 없음.
해설
구간의 시작점 가 주어졌을 때, 의 부분 문자열 가 문제의 조건을 만족하는 가장 큰 구간의 끝점 를 라고 정의하면, 구간 의 길이인 의 최댓값을 구하면 문제를 해결할 수 있다.
항상 가 성립하기 때문에 을 시간복잡도에 계산할 수 있으므로 전체 문제를 시간복잡도에 해결할 수 있다.