비 단조성

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

요약
1부터 n까지의 순열이 주어질 때, 내림차순으로 시작해 내림과 오름이 번갈아 나타나는 가장 긴 부분수열의 길이를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 배열, 이분 탐색, 그리디
정답자
아직 제출이 없습니다

문제

11부터 nn까지 서로 다른 정수 nn개로 이루어진 길이 nn의 수열 AA가 있다. 이 수열의 부분 수열 중에서 다음 조건을 만족하는 가장 긴 수열 BB의 길이를 구하려고 한다.

B0>B1<B2>B3<⋯B_0 > B_1 < B_2 > B_3 < \cdots

즉 BB의 원소는 앞에서부터 차례대로 '크다, 작다, 크다, 작다'를 번갈아 만족해야 하며, 맨 처음 비교는 반드시 '크다'(B0>B1B_0 > B_1)여야 한다. 부분 수열이란 원래 수열에서 원소 몇 개를 지우고 남은 수열을 말하며, 남은 원소들의 순서는 그대로 유지된다. 원소가 하나뿐인 수열도 조건을 만족하는 것으로 본다.

AA가 주어졌을 때 이러한 BB의 최대 길이를 출력하는 프로그램을 작성하여라.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤501 \le T \le 50).

각 테스트 케이스는 한 줄로 이루어지며, 형식은 다음과 같다.

n A[0] A[1] A[2] ... A[n-1]

nn은 수열의 길이이고 (1≤n≤300001 \le n \le 30000), 그 뒤에 수열 AA의 원소 nn개가 공백으로 구분되어 주어진다. AA는 11부터 nn까지의 정수를 각각 정확히 한 번씩 포함하는 순열이다.

출력

각 테스트 케이스마다 BB의 최대 길이를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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