import bisect import sys class SegmentTree: def __init__(self, data): self.n = len(data) self.tree = [[] for _ in range(4 * self.n)] # Initialize with empty lists self.build(0, 0, self.n - 1, data) def build(self, node, l, r, data): if l == r: self.tree[node] = [data[l]] return mid = (l + r) // 2 left_node = 2 * node + 1 right_node = 2 * node + 2 self.build(left_node, l, mid, data) self.build(right_node, mid + 1, r, data) # Merge the two sorted lists self.tree[node] = [] i = j = 0 left = self.tree[left_node] right = self.tree[right_node] len_left = len(left) len_right = len(right) while i < len_left and j < len_right: if left[i] < right[j]: self.tree[node].append(left[i]) i += 1 else: self.tree[node].append(right[j]) j += 1 self.tree[node].extend(left[i:]) self.tree[node].extend(right[j:]) def query(self, l, r, x): res = float('inf') def _query(node, node_l, node_r): nonlocal res if node_r < l or node_l > r: return if l <= node_l and node_r <= r: arr = self.tree[node] pos = bisect.bisect_left(arr, x) if pos < len(arr): res = min(res, abs(arr[pos] - x)) if pos > 0: res = min(res, abs(arr[pos - 1] - x)) return mid = (node_l + node_r) // 2 _query(2 * node + 1, node_l, mid) _query(2 * node + 2, mid + 1, node_r) _query(0, 0, self.n - 1) return res def main(): input = sys.stdin.read data = input().split() ptr = 0 N = int(data[ptr]) ptr += 1 X = list(map(int, data[ptr:ptr+N])) ptr += N st = SegmentTree(X) Q = int(data[ptr]) ptr +=1 for _ in range(Q): l = int(data[ptr]) -1 r = int(data[ptr+1]) -1 x = int(data[ptr+2]) ptr +=3 print(st.query(l, r, x)) if __name__ == "__main__": main()