"""# ### 谜题描述 On the competitive programming platform CodeCook, every person has a rating graph described by an array of integers a of length n. You are now updating the infrastructure, so you've created a program to compress these graphs. The program works as follows. Given an integer parameter k, the program takes the minimum of each contiguous subarray of length k in a. More formally, for an array a of length n and an integer k, define the k-compression array of a as an array b of length n-k+1, such that $$$b_j =min_{j≤ i≤ j+k-1}a_i$$$ For example, the 3-compression array of [1, 3, 4, 5, 2] is [min\{1, 3, 4\}, min\{3, 4, 5\}, min\{4, 5, 2\}]=[1, 3, 2]. A permutation of length m is an array consisting of m distinct integers from 1 to m in arbitrary order. For example, [2,3,1,5,4] is a permutation, but [1,2,2] is not a permutation (2 appears twice in the array) and [1,3,4] is also not a permutation (m=3 but there is 4 in the array). A k-compression array will make CodeCook users happy if it will be a permutation. Given an array a, determine for all 1≤ k≤ n if CodeCook users will be happy after a k-compression of this array or not. Input The first line contains a single integer t (1≤ t≤ 10^4) — the number of test cases. The first line of the description of each test case contains a single integer n (1≤ n≤ 3⋅ 10^5) — the length of the array. The second line of the description of each test case contains n integers a_1,…,a_n (1≤ a_i≤ n) — the elements of the array. It is guaranteed, that the sum of n for all test cases does not exceed 3⋅ 10^5. Output For each test case, print a binary string of length n. The k-th character of the string should be 1 if CodeCook users will be happy after a k-compression of the array a, and 0 otherwise. Example Input 5 5 1 5 3 4 2 4 1 3 2 1 5 1 3 3 3 2 10 1 2 3 4 5 6 7 8 9 10 3 3 3 2 Output 10111 0001 00111 1111111111 000 Note In the first test case, a=[1, 5, 3, 4, 2]. * The 1-compression of a is [1, 5, 3, 4, 2] and it is a permutation. * The 2-compression of a is [1, 3, 3, 2] and it is not a permutation, since 3 appears twice. * The 3-compression of a is [1, 3, 2] and it is a permutation. * The 4-compression of a is [1, 2] and it is a permutation. * The 5-compression of a is [1] and it is a permutation. Here is a reference code to solve this task. You can use this to help you genereate cases or validate the solution. ```python import sys if sys.subversion[0] == \"PyPy\": import io, atexit sys.stdout = io.BytesIO() atexit.register(lambda: sys.__stdout__.write(sys.stdout.getvalue())) sys.stdin = io.BytesIO(sys.stdin.read()) input = lambda: sys.stdin.readline().rstrip() RS = raw_input RI = lambda x=int: map(x,RS().split()) RN = lambda x=int: x(RS()) ''' ...................................................................... ''' class SegTree: ''' PU-RQ ''' def __init__(self,arr,n): ''' Builds in O(N) ''' self.N = n self.tree = [float('inf')]*(2*n) for i in xrange(n): # Leaf Node self.tree[n+i] = arr[i] for i in xrange(n-1,0,-1): # Parent Node self.tree[i] = min(self.tree[2*i] , self.tree[2*i+1]) def update(self, i, newValue): ''' 0-Based Indexing ''' i += self.N # Points to leaf node (i) self.tree[i] = newValue while i>1: i/=2 # Points to parent node self.tree[i] = min(self.tree[2*i] , self.tree[2*i+1]) def query(self, L, R): ''' Query in interval [L,R] (0-Based Indexing) ''' # Leaf Nodes L += self.N R += self.N + 1 res = float('inf') while L=某个值时出现 for m in range(1, n): max_k = n - m + 1 if m in min_intervals and min_intervals[m] >= m: for k in range(max(1, m), max_k+1): if k <= min_intervals[m]: answer[k-1] = '1' # 最终验证每个k的结果 for k in range(1, n+1): m = n - k + 1 if m < 1: continue if answer[k-1] == '1': # 二次验证确保正确性 window_min = self.sliding_window_min(a, k) if not self.is_permutation(window_min, m): answer[k-1] = '0' return ''.join(answer) @staticmethod def sliding_window_min(arr, k): """精确计算滑动窗口的最小值""" dq = deque() result = [] for i, num in enumerate(arr): while dq and arr[dq[-1]] >= num: dq.pop() dq.append(i) if dq[0] == i - k: dq.popleft() if i >= k - 1: result.append(arr[dq[0]]) return result @staticmethod def is_permutation(nums, m): """验证是否为1~m的排列""" return len(nums) == m and set(nums) == set(range(1, m+1)) and len(set(nums)) == m @staticmethod def prompt_func(question_case) -> str: a_str = ' '.join(map(str, question_case['a'])) n = question_case['n'] return f"""给定长度为{n}的数组:[{a_str}] 请对k=1到k={n}依次判断: 1. 计算k-compression数组(每个元素是连续k个元素的最小值) 2. 检查该数组是否是1到(n-k+1)的排列 输出:长度为{n}的二进制字符串,第k位为1表示有效。答案置于[answer][/answer]中。例如:[answer]1010[/answer]""" @staticmethod def extract_output(output): import re matches = re.findall(r'\[answer\]\s*(\d+)\s*\[/answer\]', output, re.IGNORECASE) return matches[-1] if matches else None @classmethod def _verify_correction(cls, solution, identity): # 格式验证 if not solution or len(solution) != identity['n']: return False # 逻辑验证(兼容可能存在多个正确解的情况) expected = identity['correct_answer'] # 检查每个有效位的合理性 for k in range(1, identity['n']+1): if solution[k-1] == '1' and expected[k-1] == '0': return False if identity['case_type'] == 'invalid_all' and '1' in solution: return False return solution == expected