#include <bits/stdc++.h>   using namespace std;   const int Maxn = 100005;   int n, q, tree_ct, k[Maxn], r[Maxn], ord[Maxn], Head[Maxn];   struct Tree {     int lson, rson;     long long k, b;   } tree[24 * Maxn];   void build_first(int root, int lt, int rt) {     if (lt + 1 == rt)       tree[root].k = k[lt], tree[root].b = 0;     else {       int mid = (lt + rt) >> 1;       tree[root].lson = ++tree_ct;       tree[root].rson = ++tree_ct;       build_first(tree[root].lson, lt, mid);       build_first(tree[root].rson, mid, rt);       tree[root].k = tree[tree[root].lson].k + tree[tree[root].rson].k;       tree[root].b = tree[tree[root].lson].b + tree[tree[root].rson].b;     }   }   void build(int root, int las, int lt, int rt, int pos) {     if (lt + 1 == rt)       tree[root].k = 0, tree[root].b = r[lt];     else {       int mid = (lt + rt) >> 1;       if (pos >= mid) {         tree[root].rson = ++tree_ct;         tree[root].lson = tree[las].lson;         build(tree[root].rson, tree[las].rson, mid, rt, pos);       } else {         tree[root].lson = ++tree_ct;         tree[root].rson = tree[las].rson;         build(tree[root].lson, tree[las].lson, lt, mid, pos);       }       tree[root].k = tree[tree[root].lson].k + tree[tree[root].rson].k;       tree[root].b = tree[tree[root].lson].b + tree[tree[root].rson].b;     }   }   pair<long long, long long> operator+(pair<long long, long long> a,                                        pair<long long, long long> b) {     return make_pair(a.first + b.first, a.second + b.second);   }   pair<long long, long long> ask(int root, int lt, int rt, int L, int R) {     if (lt == L && rt == R)       return make_pair(tree[root].k, tree[root].b);     else {       int mid = (lt + rt) >> 1;       if (L >= mid)         return ask(tree[root].rson, mid, rt, L, R);       else if (R <= mid)         return ask(tree[root].lson, lt, mid, L, R);       else         return ask(tree[root].lson, lt, mid, L, mid) +                ask(tree[root].rson, mid, rt, mid, R);     }   }   struct sta {     int lt, rt;     double t;     bool operator<(const sta &tmp) const { return lt < tmp.lt; }   };   set<sta> Se;   set<sta>::iterator spilt(int x) {     if (x > n) return Se.end();     sta tmp = *(--Se.upper_bound((sta){x, 0, 0}));     Se.erase(tmp);     if (tmp.lt != x) Se.insert((sta){tmp.lt, x - 1, tmp.t});     return Se.insert((sta){x, tmp.rt, tmp.t}).first;   }   pair<long long, long long> cal(double t, int lt, int rt) {     int L = 0, R = n;     while (L + 1 <= R) {       int mid = (L + R + 1) >> 1;       if (r[ord[mid]] > t * k[ord[mid]])         R = mid - 1;       else         L = mid;     }     return ask(Head[L], 1, n + 1, lt, rt + 1);   }   set<pair<int, int> > S;   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       int x;       scanf( %d%d%d , &x, &r[i], &k[i]), ord[i] = i;       if (!r[i] && !k[i]) r[i] = 1;       if (k[i])         Se.insert((sta){i, i, -x / (double)k[i]});       else         Se.insert((sta){i, i, 0}), S.insert(make_pair(i, x));     }     S.insert(make_pair(n + 1, 0));     Head[0] = ++tree_ct;     build_first(Head[0], 1, n + 1);     sort(ord + 1, ord + 1 + n, [](int x, int y) {       return r[x] * (long long)k[y] < r[y] * (long long)k[x];     });     for (int i = 1; i <= n; i++)       Head[i] = ++tree_ct, build(Head[i], Head[i - 1], 1, n + 1, ord[i]);     scanf( %d , &q);     while (q--) {       int t, lt, rt;       long long ans = 0;       scanf( %d%d%d , &t, &lt, &rt);       set<pair<int, int> >::iterator it;       while (S.size() > 1 &&              (it = S.lower_bound(make_pair(lt, 0)))->first <= rt) {         ans += it->second;         S.erase(it);       }       set<sta>::iterator it_r = spilt(rt + 1), it_l = spilt(lt), tmp_it;       tmp_it = it_l;       for (; it_l != it_r; it_l++) {         pair<long long, long long> now = cal(t - it_l->t, it_l->lt, it_l->rt);         ans += now.second + (long long)(now.first * (t - it_l->t) + 0.5);       }       Se.erase(tmp_it, it_r);       Se.insert((sta){lt, rt, (double)t});       printf( %lld n , ans);     }     return 0;   }