Trouble Sort (Codeforces 1365B)
Tags: Implement, constructive algorithms

Ashish has $$$n$$$ elements arranged in a line. These elements are represented by two integers $$$a_i$$$ — the value of the element and $$$b_i$$$ — the type of the element (there are only two possible types: $$$0$$$ and $$$1$$$). He wants to sort the elements in non-decreasing values of $$$a_i$$$.He can perform the following operation any number of times:  Select any two elements $$$i$$$ and $$$j$$$ such that $$$b_i \ne b_j$$$ and swap them. That is, he can only swap two elements of different types in one move. Tell him if he can sort the elements in non-decreasing values of $$$a_i$$$ after performing any number of operations.

Input: The first line contains one integer $$$t$$$ $$$(1 \le t \le 100)$$$ — the number of test cases. The description of the test cases follows.The first line of each test case contains one integer $$$n$$$ $$$(1 \le n \le 500)$$$ — the size of the arrays.The second line contains $$$n$$$ integers $$$a_i$$$ $$$(1 \le a_i \le 10^5)$$$  — the value of the $$$i$$$-th element.The third line containts $$$n$$$ integers $$$b_i$$$ $$$(b_i \in \{0, 1\})$$$  — the type of the $$$i$$$-th element.

Output: For each test case, print "Yes" or "No" (without quotes) depending on whether it is possible to sort elements in non-decreasing order of their value.You may print each letter in any case (upper or lower).

Note: For the first case: The elements are already in sorted order.For the second case: Ashish may first swap elements at positions $$$1$$$ and $$$2$$$, then swap elements at positions $$$2$$$ and $$$3$$$.For the third case: The elements are already in sorted order.For the fourth case: No swap operations may be performed as there is no pair of elements $$$i$$$ and $$$j$$$ such that $$$b_i \ne b_j$$$. The elements cannot be sorted.For the fifth case: Ashish may swap elements at positions $$$3$$$ and $$$4$$$, then elements at positions $$$1$$$ and $$$2$$$.

Sample Inputs:
5
4
10 20 20 30
0 1 0 1
3
3 1 2
0 1 1
4
2 2 4 8
1 1 1 1
3
5 15 4
0 0 0
4
20 10 100 50
1 0 0 1

Sample Outputs:
Yes
Yes
Yes
No
Yes

Solution (Python):
for _ in [0] * int(input()):
    n = int(input())
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    k = 0
    for i in range(1, len(a)):
        if a[i] < a[i - 1]:
            k = 1
            break
    print('NO' if k == 1 and len(set(b)) == 1 else 'YES')

Solution (Python):
def solve():
    n = int(input())
    a = [int(i) for i in input().split()]
    b = [int(i) for i in input().split()]
    if sorted(a) == a:
        print('YES')
    elif b in ([0] * n, [1] * n):
        print('NO')
    elif 0 in b or 1 in b:
        print('YES')
    else:
        print('YES')
for i in range(int(input())):
    solve()

Solution (Python):
t = int(input())
for i in range(t):
    n = int(input())
    arr = list(map(int, input().split()))
    types = list(map(int, input().split()))
    print('Yes' if len(set(types)) == 2 or arr == sorted(arr) else 'No')