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

题目描述

star 最近在研究奇怪的排序,他给定一个长度为 n 的排列 a,你可以做如下操作任意多次:
  • 每次选择一个区间 [l,r]a_l,a_{l+1},...,a_r,对他们进行重排,假设重排后为:a'_l,a'_{l+1},...,a'_r,要求对于 \forall i\in[l,r],都要满足 a_i\not=a'_i
现在 star 问你,最少操作几次,可以把这个排列变为:1,2,3,...,n

输入描述:

本题有多组测试数据。

先输入 T(1\leq T\leq 10^5),表示数据组数。

对于每组数据:

1 行输入 n(1\leq n\leq 10^6),表示序列的长度。

2 行输入 n 个整数 a_i(1\leq a_i\leq n),保证序列 a 是一个排列。

数据保证 T 组数据的 \sum n\leq 10^6

输出描述:

对于每组数据,输出最小操作次数。
示例1

输入

复制
2
5
1 2 3 4 5
4
1 2 4 3

输出

复制
0
1

说明

1 组数据,由于已经按要求排列,所以最小操作次数为 0

2 组数据,显然可以选择区间 [3,4],重排前:a_3=4,a_4=3,重排后:a_3=3,a_4=4,且满足重排的条件,操作完后序列已经按要求排列,所以最小操作次数为 1