#include <bits/stdc++.h>
using namespace std;
int n;
int a[200010];
int t;
int l, r;
int maxn, minn;
int main() {
cin >> t;
while (t--) {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
if (n <= 3) {
cout << "-1" << endl;
continue;
}
l = minn = 1;
r = maxn = n;
while (r - l + 1 > 3) {
if (a[l] == minn)
l++, minn++;
else if (a[l] == maxn)
l++, maxn--;
else if (a[r] == minn)
r--, minn++;
else if (a[r] == maxn)
r--, maxn--;
else
break;
}
if (r - l + 1 > 3)
cout << l << " " << r << endl;
else
cout << -1 << endl;
}
}
由于这个双指针 无论哪一个指针,只要进行了移动,都会对另一个指针的值产生了影响,所以应该每次对头尾的最值各判定一次,只要其中的一个需要移动,那么就要从头进行盘对,如果每一次都不需要移动,那么就是我们需要的情况