Rounddog를 행복하게 만들기

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

요약
원소가 모두 서로 다르고 최댓값에서 길이를 뺀 값이 k 이하인 부분 배열의 개수를 센다. 배열 길이는 최대 300,000이고 원소는 1 이상 n 이하다.
난이도

어려움10점 중 9점

유형
분할 정복, 투 포인터, 세그먼트 트리, 배열
정답자
아직 제출이 없습니다

문제

Rounddog는 오른쪽 주머니에 항상 배열 a1,a2,…,ana_1, a_2, \ldots, a_n을 넣고 다니며, 이 배열은 1≤ai≤n1 \le a_i \le n을 만족한다.

부분 배열이란 원래 배열의 비어 있지 않은 연속한 구간이다. Rounddog는 구간 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r에 있는 모든 원소가 서로 다르고 max⁡(al,al+1,…,ar)−(r−l+1)≤k\max(a_l, a_{l+1}, \ldots, a_r) - (r - l + 1) \le k를 만족할 때 이 구간을 좋은 부분 배열이라고 정의한다.

Rounddog는 오늘 행복하지 않다. 그의 가장 친한 친구인 당신은 그를 행복하게 만들기 위해 aa의 모든 좋은 부분 배열을 찾으려 한다. aa의 좋은 부분 배열의 개수를 구하시오.

입력

입력은 여러 테스트 케이스로 이루어지며, 첫째 줄에 테스트 케이스의 수 TT (1≤T≤201 \le T \le 20)가 주어진다.

각 테스트 케이스의 첫째 줄에는 두 정수 nn (1≤n≤300 0001 \le n \le 300\,000)과 kk (1≤k≤300 0001 \le k \le 300\,000)가 주어진다.

둘째 줄에는 nn개의 정수가 주어지며, ii번째 정수는 aia_i (1≤ai≤n1 \le a_i \le n)이다.

모든 테스트 케이스에서 nn의 합은 1 000 0001\,000\,000을 넘지 않는다.

출력

각 테스트 케이스마다 주어진 배열의 좋은 부분 배열 개수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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