#include using namespace std; using int64 = long long; const int64 INF64 = (1LL<<62); struct Node { int64 mn[4]; Node() { mn[0]=mn[1]=mn[2]=mn[3]=INF64; } void set(int idx, int64 v){ mn[idx]=v; } static Node merge(const Node& a, const Node& b){ Node c; for(int i=0;i<4;i++) c.mn[i]=min(a.mn[i], b.mn[i]); return c; } }; struct SegTree { int n; vector st; SegTree(const vector>& base){ int sz = base.size(); n = 1; while(n=1;i--){ st[i] = Node::merge(st[i<<1], st[i<<1|1]); } } // query on [l,r) 0-indexed Node query(int l, int r) const{ Node L, R; for(l+=n, r+=n; l>=1, r>>=1){ if (l&1) L = Node::merge(L, st[l++]); if (r&1) R = Node::merge(st[--r], R); } return Node::merge(L, R); } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; if(!(cin>>N)) return 0; vector A(N), B(N), D(N); for(int i=0;i>A[i]>>B[i]>>D[i]; // pre-compute U_{tk} = ±A ± B + D vector> base(N); for(int i=0;i>Q; while(Q--){ int S,L,R; cin>>S>>L>>R; --S; --L; --R; // 0-index Node nd = seg.query(L, R+1); int64 T[4] = { A[S] + B[S], A[S] - B[S], -A[S] + B[S], -A[S] - B[S] }; int64 F = -INF64; for(int t=0;t<4;t++){ F = max(F, T[t] - nd.mn[t]); } cout << (F < D[S] ? "Yes\n" : "No\n"); } return 0; }