Dora and Search (Codeforces 1793C)
Tags: Others, two pointers

As you know, the girl Dora is always looking for something. This time she was given a permutation, and she wants to find such a subsegment of it that none of the elements at its ends is either the minimum or the maximum of the entire subsegment. More formally, you are asked to find the numbers $$$l$$$ and $$$r$$$ $$$(1 \leq l \leq r \leq n)$$$ such that $$$a_l \neq \min(a_l, a_{l + 1}, \ldots, a_r)$$$, $$$a_l \neq \max(a_l, a_{l + 1}, \ldots, a_r)$$$ and $$$a_r \neq \min(a_l, a_{l + 1}, \ldots, a_r)$$$, $$$a_r \neq \max(a_l, a_{l + 1}, \ldots, a_r)$$$.A permutation of length $$$n$$$ is an array consisting of $$$n$$$ distinct integers from $$$1$$$ to $$$n$$$ in any order. For example, $$$[2,3,1,5,4]$$$ is a permutation, but $$$[1,2,2]$$$ is not a permutation ($$$2$$$ occurs twice in the array) and $$$[1,3,4]$$$ is also not a permutation ($$$n=3$$$, but $$$4$$$ is present in the array).Help Dora find such a subsegment, or tell her that such a subsegment does not exist.

Input: Each test consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases. Description of the test cases follows.For each test case, the first line contains one integer $$$n$$$ ($$$1 \leq n \leq 2 \cdot 10^5$$$) — the length of permutation.The second line contains $$$n$$$ distinct integers $$$a_1, a_2, \ldots, a_n$$$ ($$$1 \leq a_i \leq n$$$) — the elements of permutation. It is guarented that the sum of $$$n$$$ over all test cases doesn't exceed $$$2 \cdot 10^5$$$.

Output: For each test case, output $$$-1$$$ if the desired subsegment does not exist.Otherwise, output two indexes $$$l, r$$$ such that $$$[a_{l}, a_{l + 1}, \ldots, a_{r}]$$$ satisfies all conditions.If there are several solutions, then output any of them.

Note: In the first and fourth test cases, it can be shown that there are no desired subsegments.In the second test case, the subsegment $$$[1, 4]$$$ satisfies all the conditions, because $$$\max(a_1, a_2, a_3, a_4) = 4, \min(a_1, a_2, a_3, a_4) = 1$$$, as we see, all the conditions are met.In the third test case, the subsegment $$$[2, 6]$$$ also satisfies all the conditions described.

Sample Inputs:
4
3
1 2 3
4
2 1 4 3
7
1 3 2 4 6 5 7
6
2 3 6 5 4 1

Sample Outputs:
-1
1 4
2 6
-1

Solution (Python):
""""""

def solve():
    n = int(input())
    a = list(map(int, input().split()))
    (cur1, cur2) = (1, n)
    (l, r) = (0, n - 1)
    while l < r:
        if a[l] == cur1:
            l += 1
            cur1 += 1
        elif a[l] == cur2:
            l += 1
            cur2 -= 1
        elif a[r] == cur1:
            r -= 1
            cur1 += 1
        elif a[r] == cur2:
            r -= 1
            cur2 -= 1
        else:
            break
    if l >= r:
        print(-1)
        return
    print(l + 1, r + 1)
T = int(input())
for _ in range(T):
    solve()

Solution (Python):
t = int(input())
for _ in range(t):
    n = int(input())
    perm = list(map(int, input().split()))
    l = 0
    r = n - 1
    mini = 1
    maxi = n
    while True:
        if l < r:
            if perm[l] == mini:
                mini += 1
                l += 1
                continue
            if perm[l] == maxi:
                maxi -= 1
                l += 1
                continue
            if perm[r] == mini:
                mini += 1
                r -= 1
                continue
            if perm[r] == maxi:
                maxi -= 1
                r -= 1
                continue
            print(l + 1, r + 1)
            break
        else:
            print(-1)
            break

Solution (Python):
""""""

def doratest(n, permutation):
    l = 1
    r = n
    i = 0
    j = n - 1
    while i <= j:
        if permutation[i] == l:
            l += 1
            i += 1
        elif permutation[i] == r:
            r -= 1
            i += 1
        elif permutation[j] == l:
            l += 1
            j -= 1
        elif permutation[j] == r:
            r -= 1
            j -= 1
        else:
            return str(i + 1) + ' ' + str(j + 1)
            break
    return -1
t = int(input())
for _ in range(t):
    n = int(input())
    print(doratest(n, list(map(int, input().split()))))