题目描述
给你一个包含 n 个整数的数组 a,数组中的元素 各不相同 。
问:能否通过 恰好翻转一次 数组,使其变成一个单调递增的数组。
注:这里的翻转指的是选择数组中一段连续的元素并翻转他们的位置。这次翻转我们需要选择两个坐标 l,r(1≤l≤r≤n),则以 a[l] 为起点,以 a[r] 为终点的连续一段区间的元素为 a[l],a[l+1],⋯,a[r],对其进行翻转后整个数组将变成:
a[1],a[2],⋯,a[l−2],a[l−1],a[r],a[r−1],⋯,a[l+1],a[l],a[r+1],a[r+1],⋯,a[n−1],a[n]
比如,对于一个包含 n=6 个元素的数组 a[1],a[2],a[3],a[4],a[5],a[6],如果我选择以 a[2] 作为起点,以 a[4] 作为终点进行翻转,则翻转后的数组为 a[1],a[4],a[3],a[2],a[5],a[6]。
输入格式
输入的第一行包含一个整数 t(1≤t≤10),用于表示测试数据的组数。
接下来包含 t 组测试数据,每组测试数据包含两行,其中:第一行包含一个整数 n(1≤n≤1000),表示数组的大小;第二行包含 n 个整数,两两之间以一个空格分隔,表示数组中的元素 a[1],a[2],⋯,a[n](1≤a[i]≤109)。
输出格式
对于每一组测试数据,如果能够通过恰好一次翻转使数组单调递增,输出一行“yes”;否则,输出一行“no”。
样例
4
3
3 2 1
4
2 1 3 4
4
3 1 2 4
3
1 2 3
yes
yes
no
yes
样例解释
- 对于第1组测试数据,可以以 a[1] 为起点,以 a[3] 为终点进行一次翻转;
- 对于第2组测试数据,可以以 a[1] 为起点,以 a[2] 为终点进行一次翻转;
- 对于第3组测试数据,没有办法通过一次翻转使其单调递增;
- 对于第4组测试数据,可以以任何一个点同时为起点和终点进行一次翻转(比如以 a[1] 为起点,同时也以 a[1] 为终点)。
数据范围
对于 100% 的数据:1≤t≤10,1≤n≤1000,1≤∣a[i]∣≤109。