Anti palindrome query(p)

Added: 2025-09-12 23:28:57

Question Image

Anti palindrome query(p)

Answer

✏️ Edit
import sys
input = sys.stdin.readline

def can_be_anti_palindrome(freq, length):
    if length % 2 == 1:
        return False
    for f in freq.values():
        if f > length // 2:
            return False
    return True

t = int(input())
for _ in range(t):
    n, q = map(int, input().split())
    arr = list(map(int, input().split()))

    # Precompute prefix frequency for quick queries
    pref = [[0]*(n+1) for _ in range(4)]  # since values are only 1,2,3

    for i in range(1, n+1):
        for v in (1,2,3):
            pref[v][i] = pref[v][i-1]
        pref[arr[i-1]][i] += 1

    for __ in range(q):
        L, R = map(int, input().split())
        length = R - L + 1

        # build frequency dict for subarray [L, R]
        freq = {
            1: pref[1][R] - pref[1][L-1],
            2: pref[2][R] - pref[2][L-1],
            3: pref[3][R] - pref[3][L-1],
        }

        if can_be_anti_palindrome(freq, length):
            print("Yes")
        else:
            print("No")