CF2249C Double-Rift Dial

题目描述

一个长度为 $n$ 的排列 $p$ 被顺时针写在一个圆盘上。 选择一个起始位置 $s$($1\le s\le n$),从 $p_s$ 开始顺时针读取一圈,超过 $p_n$ 后从 $p_1$ 继续。最终得到的序列为 $$ q=[p_s,p_{s+1},\ldots,p_n,p_1,\ldots,p_{s-1}] $$ 该序列的长度同样为 $n$。 对于序列 $q$ 的任意非空前缀 $[q_1, q_2, \ldots, q_k]$($k\ge 1$),设 $S$ 为对应的集合,即 $S=\{q_1, q_2,\ldots, q_k\}$。将 $S$ 拆分成若干个最大长度的连续整数段,这些段称为 $S$ 的块。 例如,$S=\{1,2,5,7,8,9\}$ 有 $3$ 个块:$\{1,2\}$,$\{5\}$,以及 $\{7,8,9\}$。 当且仅当对 $q$ 的每个非空前缀,其对应集合 $S$ 的块数都不超过 $2$,这个起始位置 $s$ 被称为“好”的起始位置。 求所有“好”的起始位置的数量。 $^{\text{∗}}$ 一个长度为 $n$ 的排列,是一组 $1$ 到 $n$ 的互不相同的整数按任意顺序组成的数组。例如 $[2,3,1,5,4]$ 是排列,而 $[1,2,2]$ 不是($2$ 出现两次),$[1,3,4]$ 也不是($n=3$ 但出现了 $4$)。

输入格式

每个测试用例包含多组测试数据。第一行包含测试用例数 $t$($1 \le t \le 10^4$)。 每组测试数据的第一行包含一个整数 $n$($1\le n\le 2\cdot 10^5$),表示排列 $p$ 的长度。 第二行包括 $n$ 个整数 $p_1,p_2,\ldots,p_n$($1\le p_i\le n$,所有 $p_i$ 互不相同),表示排列 $p$ 的元素。 保证所有测试用例中 $n$ 的总和不超过 $2\cdot 10^5$。

输出格式

对于每组测试数据,输出一个整数,表示“好”的起始位置的数量。

说明/提示

在第一个测试用例中,只有一个起始位置。其每个非空前缀只包含单个值 $1$,只有一个块。因此该位置为好位置。 在第二个测试用例中,从第 $1$ 个位置读出的前 $3$ 个数,集合为 $\{1,3,5\}$,包含 $3$ 个块。因此第 $1$ 个位置不是好的,其余 $4$ 个起始位置均为好位置。 由 ChatGPT 5 翻译