You are given a permutation p of size n. You want to minimize the number of subarrays of p that are permutations. In order to do so, you must perform the following operation exactly once:
- Select integers i, j, where 1≤i,j≤n, then
- Swap pi and pj.
For example, if p=[5,1,4,2,3] and we choose i=2, j=3, the resulting array will be [5,4,1,2,3]. If instead we choose i=j=5, the resulting array will be [5,1,4,2,3].
Which choice of i and j will minimize the number of subarrays that are permutations?
A permutation of length n is an array consisting of n distinct integers from 1 to n in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array), and [1,3,4] is also not a permutation (n=3 but there is 4 in the array).
An array a is a subarray of an array b if a can be obtained from b by the deletion of several (possibly, zero or all) elements from the beginning and several (possibly, zero or all) elements from the end.
Input
The first line of the input contains a single integer t (1≤t≤10^4) — the number of test cases. The description of the test cases follows.
The first line of each test case contains a single integer n (3≤n≤2⋅10^5) — the size of the permutation.
The next line of each test case contains n integers p1,p2,…pn (1≤pi≤n, all pi are distinct) — the elements of the permutation p.
It is guaranteed that the sum of n over all test cases does not exceed 2⋅10^5.
Output
For each test case, output two integers i and j (1≤i,j≤n) — the indices to swap in p.
If there are multiple solutions, print any of them.
input
8
3
1 2 3
3
1 3 2
5
1 3 2 5 4
6
4 5 6 1 2 3
9
8 7 6 3 2 1 4 5 9
10
7 10 5 1 9 8 3 2 6 4
10
8 5 10 9 2 1 3 4 6 7
10
2 3 5 7 10 1 8 6 4 9
output
2 3
1 1
5 2
1 4
9 5
8 8
6 10
5 4
Note
For the first test case, there are four possible arrays after the swap:
- If we swap p1 and p2, we get the array [2,1,3], which has 3 subarrays that are permutations ([1], [2,1], [2,1,3]).
- If we swap p1 and p3, we get the array [3,2,1], which has 3 subarrays that are permutations ([1], [2,1], [3,2,1]).
- If we swap p2 and p3, we get the array [1,3,2], which has 2 subarrays that are permutations ([1], [1,3,2]).
- If we swap any element with itself, we get the array [1,2,3], which has 3 subarrays that are permutations ([1], [1,2], [1,2,3]).
So the best swap to make is positions 2 and 3.
For the third sample case, after we swap elements at positions 2 and 5, the resulting array is [1,4,2,5,3]. The only subarrays that are permutations are [1] and [1,4,2,5,3]. We can show that this is minimal.
题意:交换一次x[ i ],x[ j ]( i 可以等于 j ),使得子数组是一个1~k的排列个数最小,求交换的位置。
解析:我们可以使得最大的数插在1和2中间,那么满足条件的子数组就只有一个,就是全选的时候,那么肯定就是最优的,那么我们找出1,2,n的下标,分情况输出对应答案即可。
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int x[N];
void solve()
{
int n,a,b,c;//abc分别是1,2,n的下标
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x[i]);
if(x[i]==1) a=i;
if(x[i]==2) b=i;
else if(x[i]==n) c=i;
}
if(a<b&&b<c) printf("%d %d\n",b,c);
else if(a<c&&c<b) printf("1 1\n");
else if(b<a&&a<c) printf("%d %d\n",a,c);
else if(b<c&&c<a) printf("1 1\n");
else if(c<a&&a<b) printf("%d %d\n",a,c);
else printf("%d %d\n",c,b);
}
int main()
{
int t=1;
scanf("%d",&t);
while(t--) solve();
return 0;
}