CF Round 877--B. Minimize Permutation Subarrays

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值