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

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

사라진 순열

면접 대비

시간 제한15초메모리 제한256 MB

요약
빈칸에 빠진 수를 채워 만들 수 있는 가장 긴 증가 부분 수열의 길이를 구합니다.
난이도

보통10점 중 5점

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

문제

꼬마 토마토는 11부터 nn까지의 수를 한 번씩 늘어놓은 순열 PP를 칠판에 적어 둔다. 날마다 PP의 수 몇 개를 서로 바꿔 새 순열 P′P'를 만들고, P′P'의 가장 긴 증가 부분 수열(LIS)을 찾는다. 언젠가 LIS를 더 빠르게 계산하는 방법을 찾아내리라 믿기 때문이다.

지진이 난 어느 날, 칠판에 적힌 수 가운데 몇 개가 떨어져 나갔다. 떨어진 수를 빈자리에 모두 되돌려 놓되 어느 자리에 놓을지는 토마토가 고른다. 이렇게 복원한 순열의 LIS 길이는 최대 얼마인가?

증가 부분 수열은 왼쪽에서 오른쪽으로 읽을 때 값이 계속 커지는 부분 수열이다.

입력

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

각 테스트 케이스의 첫째 줄에는 순열의 길이 nn이 주어진다 (1≤n≤1051 \le n \le 10^5). 둘째 줄에는 일부가 빠진 순열 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다. ai=0a_i = 0은 원래 ii번째 자리에 있던 수가 떨어졌다는 뜻이다.

입력은 항상 올바르다. 00이 아닌 값은 서로 다르고 모두 11 이상 nn 이하이며, 떨어진 수는 순열에 나타나지 않은 수와 정확히 일치한다. 입력 전체의 크기는 10MB 미만이다.

출력

각 테스트 케이스마다 복원한 순열의 LIS 길이가 최대 얼마인지 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    4
    5
    0 0 0 0 0
    10
    1 2 3 4 0 0 0 0 9 10
    14
    1 0 3 0 5 0 7 0 9 0 11 0 13 0
    9
    3 0 0 0 7 8 9 0 0
    
    예상 출력
    5
    10
    14
    7
    
  2. 예제 2

    입력
    2
    1
    0
    1
    1
    
    예상 출력
    1
    1
    
  3. 예제 3

    입력
    3
    5
    1 2 3 4 5
    5
    5 4 3 2 1
    8
    3 1 4 7 2 6 5 8
    
    예상 출력
    5
    1
    4