Block Array
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}如果一个数组中,所有的元素都恰好等于数组长度,则该数组被称为块。例如 \{3,3,3\}\{1\} 都被称为块,而 \{1,2,2\} 则不行。
\hspace{15pt}如果一个数组可以被划分成若干个区间,使得每个区间都是一个"块",则称此数组为好数组。

\hspace{15pt}现在小苯给定你一个长度为 n 的数组 a,你的任务是求出其中有多少个连续的子数组是好数组。

\hspace{15pt}形式化的即,求出满足如下条件的 l,r 数对个数:
\hspace{23pt}\bullet\1 \leqq l \leqq r \leqq n
\hspace{23pt}\bullet\\{a_l,a_{l+1},...,a_r\} 是一个好数组。

    (注意是好数组个数,不是“块”的个数。)

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\ (1\leqq T\leqq 10^5) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行一个整数 n\ (1 \leqq n \leqq 5 \times 10^5),表示数组 a 的长度。
\hspace{15pt}第二行 n 个整数 a_i\ (1 \leqq a_i \leqq n),表示数组 a

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 5 \times 10^5

输出描述:

对于每组测试数据:
\hspace{15pt}在单独的一行输出一个整数,表示好数组的总个数。
示例1

输入

复制
2
6
1 2 2 3 3 3
7
1 2 2 1 3 1 1

输出

复制
6
9

说明

对于第一组测试数据,好子数组有:
\{1\},\{2,2\},\{1,2,2\},\{3,3,3\},\{2,2,3,3,3\},\{1,2,2,3,3,3\},共 6 个。