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

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

타잔 점프

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

요약
각 k마다 타잔이 최대 k번 점프로 마지막 나무에 닿으려면 나무 높이를 최소 몇 번 바꿔야 하는지 구합니다.
난이도

어려움10점 중 9점

유형
트리, 동적 계획법, 분할 정복
정답자
아직 제출이 없습니다

문제

알마티 근처의 숲에 나무 NN그루가 한 줄로 서 있다. 나무는 왼쪽부터 오른쪽으로 1번부터 NN번까지 번호가 붙어 있다. ii번 나무의 높이는 HiH_i이다.

한 번의 점프에서 타잔은 ii번 나무의 꼭대기에서 jj번 나무(i<ji < j)의 꼭대기로 이동할 수 있다. 이는 다음 조건 중 하나 이상이 성립할 때이다.

  • j=i+1j = i + 1,
  • 모든 kk (i<k<ji < k < j)에 대해 Hi>HkH_i > H_k이고 Hj>HkH_j > H_k,
  • 모든 kk (i<k<ji < k < j)에 대해 Hi<HkH_i < H_k이고 Hj<HkH_j < H_k.

타잔은 1번 나무 위에 있고 NN번 나무에 도달하려 한다. 타잔의 ICPC 팀원 아베이가 도울 수 있다. 아베이는 다음 변경을 원하는 만큼 몇 번이고 할 수 있다. 번호 ii (1≤i≤n1 \le i \le n)와 정수 xx (0≤x≤10180 \le x \le 10^{18})를 고른 뒤 Hi=xH_i = x로 설정한다.

kk를 1부터 NN까지 각각 두고, 타잔이 kk번 이하의 점프로 NN번 나무에 도달할 수 있도록 아베이가 해야 하는 변경 횟수의 최솟값을 구하라.

입력

첫 줄에 테스트 케이스의 수 tt가 주어진다 (1≤t≤150 0001 \le t \le 150\,000). 각 테스트 케이스는 다음과 같이 주어진다.

각 테스트 케이스의 첫 줄에는 나무의 수 NN이 주어진다 (2≤N≤300 0002 \le N \le 300\,000).

둘째 줄에는 NN개의 정수 H1,H2,…,HNH_1, H_2, \ldots, H_N이 주어진다 (1≤Hi≤1091 \le H_i \le 10^9).

모든 테스트 케이스의 NN 합은 300 000300\,000을 넘지 않는다.

출력

각 테스트 케이스마다 정수 NN개를 출력한다. kk번째 정수는 타잔이 1번 나무에서 NN번 나무까지 kk번 이하의 점프로 갈 수 있게 하려고 아베이가 해야 하는 변경 횟수의 최솟값이다.

힌트

첫 번째 테스트 케이스에서 k=1k = 1일 때 아베이가 1번 나무의 높이를 3으로 바꾸면 타잔은 마지막 나무로 뛸 수 있다. k=2k = 2와 k=3k = 3일 때는 변경 없이 타잔이 마지막 나무에 도달할 수 있다.

예제1

  1. 예제 1

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