Flower City Fence (Codeforces 1862C)
Tags: Implement, binary search

Anya lives in the Flower City. By order of the city mayor, she has to build a fence for herself.The fence consists of $$$n$$$ planks, each with a height of $$$a_i$$$ meters. According to the order, the heights of the planks must not increase. In other words, it is true that $$$a_i \ge a_j$$$ for all $$$i < j$$$.Anya became curious whether her fence is symmetrical with respect to the diagonal. In other words, will she get the same fence if she lays all the planks horizontally in the same order.For example, for $$$n = 5$$$, $$$a = [5, 4, 3, 2, 1]$$$, the fence is symmetrical. Because if all the planks are laid horizontally, the fence will be $$$[5, 4, 3, 2, 1]$$$, as shown in the diagram.  On the left is the fence $$$[5, 4, 3, 2, 1]$$$, on the right is the same fence laid horizontally But for $$$n = 3$$$, $$$a = [4, 2, 1]$$$, the fence is not symmetrical. Because if all the planks are laid horizontally, the fence will be $$$[3, 2, 1, 1]$$$, as shown in the diagram.  On the left is the fence $$$[4, 2, 1]$$$, on the right is the same fence laid horizontally  Help Anya and determine whether her fence is symmetrical.

Input: The first line of the input contains an integer $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases. The description of the test cases follows.The first line of a test case contains a single integer $$$n$$$ ($$$1 \le n \le 2 \cdot 10^5$$$) — the length of the fence.The second line of a test case contains $$$n$$$ integers $$$a_1 \ge a_2 \ge a_3 \ge \dots \ge a_n$$$ ($$$1 \le a_i \le 10^9$$$) — the heights of the planks.The sum of the values of $$$n$$$ for all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case, output "YES" if the fence is symmetrical, otherwise output "NO".You can output each letter in any case (lowercase or uppercase). For example, the strings "yEs", "yes", "Yes" and "YES" will be accepted as a positive answer.

Note: In the first and second test cases of the example, the fence is symmetrical.In the third test case of the example, the fence is not symmetrical. If the planks are laid horizontally, the fence will be $$$[3, 2, 1, 1]$$$.In the fourth test case of the example, the fence is not symmetrical. If the planks are laid horizontally, the fence will be $$$[1, 1]$$$.In the fifth and sixth test cases of the example, the fence is symmetrical.In the seventh test case of the example, the fence is not symmetrical. If the planks are laid horizontally, the fence will be $$$[2, 1, 1, 1, 1, 1]$$$.

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

Sample Outputs:
YES
YES
NO
NO
YES
YES
NO

Solution (Python):
t = int(input())
res = []
for _ in range(0, t):
    n = int(input())
    fence = list(map(int, input().split()))
    if fence[0] != n:
        res.append('NO')
    else:
        result = True
        for i in range(1, n):
            if fence[fence[i] - 1] < i + 1:
                res.append('NO')
                result = False
                break
        if result:
            res.append('YES')
for i in res:
    print(i)

Solution (Python):
import sys
input = sys.stdin.readline

def readList():
    return list(map(int, input().split()))

def readInt():
    return int(input())

def readInts():
    return map(int, input().split())

def readStr():
    return input().strip()

def solve():
    (n, arr) = (readInt(), readList())
    j = n - 1
    for i in range(n):
        curr = arr[i] - i
        if curr == 0:
            return 'YES'
        elif curr < 0:
            return 'NO'
        else:
            b = i + curr - 1
            while j > i >= arr[j]:
                j -= 1
            if b != j:
                return 'NO'
            elif b == j == i:
                return 'YES'
    return 'YES'
for _ in range(int(input())):
    print(solve())

Solution (Python):
import sys
input = sys.stdin.readline
t = 1
t = int(input())
for _ in range(t):
    n = int(input())
    a = list(map(int, input().split()))
    for i in range(n):
        Val = a[i]
        if Val > n or a[Val - 1] < i + 1:
            print('NO')
            break
    else:
        print('YES')