import sys class SegmentTree: def __init__(self, n): self.n = n self.data = [[] for _ in range(4 * n)] def build(self, index, l, r, triangles): if l == r: self.data[index] = [triangles[l]] return mid = (l + r) // 2 self.build(2 * index + 1, l, mid, triangles) self.build(2 * index + 2, mid + 1, r, triangles) self.data[index] = sorted(self.data[2 * index + 1] + self.data[2 * index + 2]) def query(self, index, l, r, ql, qr, x_range): if r < ql or qr < l: return False if ql <= l and r <= qr: left, right = x_range return any(left < x2 and x1 < right for x1, x2 in self.data[index]) mid = (l + r) // 2 return self.query(2 * index + 1, l, mid, ql, qr, x_range) or self.query(2 * index + 2, mid + 1, r, ql, qr, x_range) def solve(): input = sys.stdin.read data = input().split() index = 0 N = int(data[index]) index += 1 triangles = [] for i in range(N): A, B, D = map(int, data[index:index+3]) index += 3 triangles.append((A - D, A + D, B - D, B)) triangles.sort() # x座標の左端でソート segment_tree = SegmentTree(N) segment_tree.build(0, 0, N - 1, [(x1, x2) for x1, x2, _, _ in triangles]) Q = int(data[index]) index += 1 results = [] for _ in range(Q): S, L, R = map(int, data[index:index+3]) index += 3 S -= 1; L -= 1; R -= 1 sx1, sx2, sy1, sy2 = triangles[S] found = segment_tree.query(0, 0, N - 1, L, R, (sx1, sx2)) results.append("Yes" if found else "No") sys.stdout.write("\n".join(results) + "\n")