만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

좋은 부분 구간

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

요약
각 k에 대해 길이가 2k 이상이고 앞쪽 k개와 뒤쪽 k개가 각각 같은 값으로 이루어지며 양 끝 값이 같은 부분 구간의 개수를 구합니다.
난이도

보통10점 중 7점

유형
해시맵, 누적 합, 배열
정답자
아직 제출이 없습니다

문제

길이가 nn인 배열 a[1..n]a[1..n]이 주어진다. 배열의 원소는 모두 11 이상 nn 이하의 정수이다. 부분 구간 a[ℓ..r]a[\ell..r]은 위치 ℓ\ell부터 위치 rr까지의 연속된 원소들이며, 양 끝을 포함한다.

부분 구간 a[ℓ..r]a[\ell..r]이 kk-good이려면 다음 조건을 모두 만족해야 한다.

  • r−ℓ+1≥2⋅kr - \ell + 1 \ge 2 \cdot k. 길이가 2⋅k2 \cdot k 이상이다.
  • aℓ=aℓ+1=⋯=aℓ+k−1a_{\ell} = a_{\ell + 1} = \cdots = a_{\ell + k - 1}. 왼쪽 끝에서 적어도 kk개의 원소가 서로 같다.
  • ar=ar−1=⋯=ar−k+1a_{r} = a_{r - 1} = \cdots = a_{r - k + 1}. 오른쪽 끝에서 적어도 kk개의 원소가 서로 같다.
  • aℓ=ara_{\ell} = a_r. 양 끝의 값이 같다.

11부터 ⌊n/2⌋\lfloor n/2 \rfloor까지의 각 kk에 대해, kk-good인 부분 구간의 개수를 구하라.

입력

첫 줄에 테스트 케이스의 개수 tt (1≤t≤5⋅1051 \le t \le 5 \cdot 10^5)가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다.

첫 줄에 정수 nn (2≤n≤5⋅1052 \le n \le 5 \cdot 10^5)이 주어진다. 둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤n1 \le a_i \le n)이 주어진다.

모든 테스트 케이스의 nn을 합하면 5⋅1055 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 ⌊n/2⌋\lfloor n/2 \rfloor개의 정수를 한 줄에 출력한다. kk번째 정수는 kk-good인 부분 구간의 개수이다.

예제1

  1. 예제 1

    입력
    4
    10
    1 2 2 2 2 2 3 2 2 2
    6
    1 1 1 2 1 1
    9
    2 2 1 1 1 2 2 1 1
    10
    3 2 3 2 4 2 10 10 10 10
    
    예상 출력
    28 11 3 0 0
    10 2 0
    16 3 0 0
    10 1 0 0 0