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

题目描述

\hspace{15pt}小苯有一个长度为 n排列 p_1, p_2, \dots, p_n,其中包含 1n 的所有整数各一次。
\hspace{15pt}小苯可以进行任意次操作(可以不操作),每次操作选择两个不相邻的位置 ij(即 \left\lvert i - j\right\rvert > 1),交换 p_ip_j
\hspace{15pt}小苯希望通过若干次操作,使得排列变成升序,即 p_i = i 对所有 1 \leqq i \leqq n 成立。
\hspace{15pt}你的任务就是判断是否可以通过操作达到目标。

【名词解释】
\hspace{15pt}排列:由 1,2,\dots,nn 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

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

\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 2 \times 10^5\right),表示排列的长度。
\hspace{15pt}第二行输入 n 个互不相同的整数 p_1, p_2, \dots, p_n\left(1 \leqq p_i \leqq n\right),表示排列。

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

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行,如果可以通过操作使排列变成升序,输出 \texttt{YES},否则输出 \texttt{NO}
示例1

输入

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

输出

复制
YES
NO
YES

说明

\hspace{15pt}对于第一组数据,已经是有序排列,不需要操作。
\hspace{15pt}对于第二组数据,需要交换第 1 个位置和第 2 个位置上的元素才能变成有序,但这两个位置相邻,无法进行不相邻交换。