CF2011F Good Subarray
题目描述
给定一个大小为 $ n $ 的整数数组 $ a $。
我们称一个数组为好数组,当且仅当它可以通过以下步骤获得:创建一个只包含任意单个整数的数组;然后执行以下操作若干次:从已存在的数组中选择一个元素(称为 $ x $),并将 $ x $、$ (x-1) $ 或 $ (x+1) $ 添加到数组的末尾。
例如,数组 $ [1, 2, 1] $、$ [5] $ 和 $ [3, 2, 1, 4] $ 是好的,而 $ [2, 4] $ 和 $ [3, 1, 2] $ 不是。
你的任务是计算数组 $ a $ 的所有连续子段中所有好数组的数量。元素相同但在数组 $ a $ 中不同位置的两个子段被视为不同。
输入格式
第一行包含数据组数 $ t $($ 1 \le t \le 10^4 $)。
每组测试的第一行包含一个整数 $ n $($ 1 \le n \le 3 \cdot 10^5 $)。
第二行包含 $ n $ 个整数 $ a_1, a_2, \dots, a_n $($ 1\le a_i\le n$)。
$n$ 的总和不超过 $3\cdot 10^5$。
输出格式
对于每个测试用例,输出数组 $a$ 的所有连续子段中所有好数组的数量。
说明/提示
在第一个例子中,以下四个子段是好的:
- 从第 $1$ 个元素到第 $1$ 个元素;
- 从第 $1$ 个元素到第 $2$ 个元素;
- 从第 $2$ 个元素到第 $2$ 个元素;
- 从第 $3$ 个元素到第 $3$ 个元素。
在第二个例子中,唯一不好的子段是从第 $3$ 个元素到第 $4$ 个元素的子段。
By [wangboyue](https://www.luogu.com.cn/user/740325)。