레코드와 안티레코드
시간 제한3초메모리 제한1024 MB
순열을 공집합이 아닌 두 부분수열로 나눠, 첫 번째 수열의 기록 개수와 두 번째 수열의 역기록 개수 합의 최댓값을 구합니다.
문제
크기가 인 순열은 부터 까지의 모든 값이 정확히 한 번씩 나타나는 정수 수열 이다.
수열 은 에서 일부 원소를 지워서 얻을 수 있으면 의 부분수열이다. 즉 이고, 를 만족하는 인덱스 이 존재한다.
- 원소 가 자신보다 앞에 있는 모든 원소보다 엄격히 크면 레코드이다. 즉 인 모든 에 대해 이다.
- 원소 가 자신보다 앞에 있는 모든 원소보다 엄격히 작으면 안티레코드이다. 즉 인 모든 에 대해 이다.
순열 이 주어진다. 를 비어 있지 않은 두 부분수열 와 로 나눈다. 의 각 원소는 둘 중 정확히 하나에 속한다. 의 레코드 개수와 의 안티레코드 개수의 합을 최대화한다.
입력
첫 줄에 테스트 케이스의 수 ()가 주어진다. 각 테스트 케이스는 두 줄로 이루어진다.
첫 줄에는 순열의 크기 ()이 주어진다. 둘째 줄에는 순열 이 주어진다. 부터 까지의 각 수는 정확히 한 번씩 나타난다.
모든 테스트 케이스의 을 합하면 을 넘지 않는다.
출력
각 테스트 케이스마다 한 줄에 정수 하나를 출력한다. 최적으로 나눴을 때 의 레코드 개수와 의 안티레코드 개수의 합의 최댓값이다.
힌트
첫 번째 테스트 케이스에서 최적으로 나누는 방법 중 하나는 다음과 같다. 박스로 표시한 원소가 의 레코드이거나 의 안티레코드이다.
두 번째 테스트 케이스에서 최적으로 나누는 방법 중 하나는 다음과 같다.