#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define eb emplace_back
#define pf printf
#define rep(x,y,z) for (int x=y;x<z;x++)
const int inf=1e17+7;
const int mn=2e5+7;
int min(int a, int b){ return (a<b?a:b); }
int max(int a, int b){ return (a>b?a:b); }
struct T{ //a - b, range set max, point insert/remove
#define lc (i*2+1)
#define rc (i*2+2)
#define m ((l+r)/2)
int f[mn*4], fm[mn*4], s[mn*4], sm[mn*4], ma[mn*4], t[mn*4], tv[mn*4];
void pu(int i){
f[i]=inf, fm[i]=inf, s[i]=inf, sm[i]=inf;
ma[i]=max(ma[lc],ma[rc]);
vector<pii> vv={{f[lc],fm[lc]},{f[rc],fm[rc]},{s[lc],sm[lc]},{s[rc],sm[rc]}};
for (auto [t,v]:vv){
if (t<f[i]){
s[i]=f[i]; sm[i]=fm[i];
f[i]=t; fm[i]=v;
}else if (t==f[i]){
fm[i]=min(v,fm[i]);
}else if (t<s[i]){
s[i]=t; sm[i]=v;
}else if (t==s[i]){
sm[i]=min(v,sm[i]);
}
}
}
void pd(int i, int l, int r){
if (!t[i]) return;
int v=tv[i];
vector<tuple<int,int,int>> vv={{lc,l,m},{rc,m+1,r}};
for (auto [ii,ll,rr]:vv){
if (ll==rr){
f[ii]=max(f[ii],v); ma[ii]=f[ii]-fm[ii]; continue;
}
if (v<=f[ii]) continue;
else if (v<=s[ii]){
f[ii]=v; t[ii]=1; tv[ii]=max(tv[ii],v); ma[ii]=max(ma[ii],f[ii]-fm[ii]);
}
}
t[i]=0; tv[i]=-inf;
}
void bld(){
rep(i,0,mn*4) f[i]=s[i]=-inf, fm[i]=sm[i]=inf, ma[i]=-inf, t[i]=0, tv[i]=-inf;
}
void chm(int i, int l, int r, int ql, int qr, int v){ //rng set mx
if (ql>qr||l>qr||r<ql) return;
if (ql<=l&&r<=qr){
if (l==r){
f[i]=max(f[i],v); ma[i]=f[i]-fm[i]; return;
}
if (v<=f[i]) return;
else if (v<=s[i]){
f[i]=v; t[i]=1; tv[i]=max(tv[i],v); ma[i]=max(ma[i],f[i]-fm[i]);
return;
}
}
pd(i,l,r);
chm(lc,l,m,ql,qr,v); chm(rc,m+1,r,ql,qr,v);
pu(i);
}
void upd(int i, int l, int r, int x, int v, bool o){
if (l==r){
if (o){ fm[i]=inf+7; ma[i]=-inf; } //rem
else { f[i]=-inf; fm[i]=v; ma[i]=f[i]-fm[i]; }
return;
}
pd(i,l,r);
if (x<=m) upd(lc,l,m,x,v,o);
else upd(rc,m+1,r,x,v,o);
pu(i);
}
int qry(int i, int l, int r, int ql, int qr){
if (l>qr||r<ql) return -inf;
if (ql<=l&&r<=qr) return ma[i];
pd(i,l,r);
return max(qry(lc,l,m,ql,qr),qry(rc,m+1,r,ql,qr));
}
#undef lc
#undef rc
#undef m
};
signed main(){
cin.tie(nullptr)->ios::sync_with_stdio(0);
int n;
cin>>n;
vector<vector<int>> add(n),rem(n);
vector<int> h(n),a(n),b(n);
vector<pii> qry(n);
rep(i,0,n){
int hh,aa,bb;
cin>>hh>>aa>>bb;
h[i]=hh; a[i]=aa; b[i]=bb;
int l=i+a[i], r=i+b[i];
l=max(0,l); l=min(n-1,l); r++;
r=max(0,r); r=min(n,r);
add[l].pb(i);
if (r<n) rem[r].pb(i);
// pf("rig %lld: %lld %lld\n",i,l,r);
l=i-b[i];
r=i-a[i];
l=max(0,l); l=min(n,l);
r=max(0,r); r=min(n-1,r);
qry[i]={l,r};
// pf("lef %lld: %lld %lld\n",i,l,r);
}
int q;
cin>>q;
vector<vector<pii>> swp(n);
rep(i,0,q){
int l,r; cin>>l>>r;
l--; r--; swp[r].pb({l,i});
}
vector<int> ans(q,-1);
for (int t:{1,-1}){
// pf("%lld:\n",t);
T tr;
tr.bld();
rep(r,0,n){
for (int i:add[r]) tr.upd(0,0,n-1,i,h[i]*t,0); //pf("add: %lld %lld\n",i,h[i]*t);
for (int i:rem[r]) tr.upd(0,0,n-1,i,h[i]*t,1); //pf("rem: %lld %lld\n",i,h[i]*t);
tr.chm(0,0,n-1,qry[r].fi,qry[r].se,h[r]*t);
// pf("chm: %lld %lld %lld\n",qry[r].fi,qry[r].se,h[r]*t);
for (auto [l,i]:swp[r]){
ans[i]=max(ans[i],tr.qry(0,0,n-1,l,r));
// pf("qry %lld %lld: %lld -> %lld\n",l,r,tr.qry(0,0,n-1,l,r),i);
}
}
}
rep(i,0,q) pf("%lld\n",ans[i]);
}