func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O2 )   #pragma GCC optimize( unroll-loops )   using namespace std;   const long double eps = 1e-7;   const int inf = 1000000010;   const long long INF = 10000000000000010LL;   const int mod = 1000000007;   const int MAXN = 100010, LOG = 20;   long long n, m, k, u, v, x, y, t, l, r, ans;   long long S[MAXN], M[MAXN], R[MAXN], D[MAXN];   int Mn[MAXN << 2], Mx[MAXN << 2], lazy[MAXN << 2];   vector<pair<int, int> > seg[MAXN << 2];   vector<long long> ps1[MAXN << 2], ps2[MAXN << 2];   void Build(int id, int tl, int tr) {     if (tr - tl == 1) {       seg[id].push_back({D[tl], tl});       ps1[id].push_back(0);       ps1[id].push_back(R[tl]);       ps2[id].push_back(M[tl]);       ps2[id].push_back(0);       return;     }     int mid = (tl + tr) >> 1;     Build(id << 1, tl, mid);     Build(id << 1 | 1, mid, tr);     seg[id].resize(tr - tl);     ps1[id].resize(tr - tl + 1, 0);     ps2[id].resize(tr - tl + 1, 0);     merge(seg[id << 1].begin(), seg[id << 1].end(), seg[id << 1 | 1].begin(),           seg[id << 1 | 1].end(), seg[id].begin());     ps1[id][0] = ps2[id][tr - tl] = 0;     for (int i = 0; i < tr - tl; i++)       ps1[id][i + 1] = ps1[id][i] + M[seg[id][i].second];     for (int i = tr - tl; i; i--)       ps2[id][i - 1] = ps2[id][i] + R[seg[id][i - 1].second];   }   void add_lazy(int id, int val) { lazy[id] = Mn[id] = Mx[id] = val; }   void shift(int id) {     if (!lazy[id]) return;     add_lazy(id << 1, lazy[id]);     add_lazy(id << 1 | 1, lazy[id]);     lazy[id] = 0;   }   void query(int id, int tl, int tr, int l, int r, int t) {     if (tr <= l || r <= tl) return;     if (l <= tl && tr <= r && Mn[id] == Mx[id] &&         (Mn[id] != -1 || tr - tl == 1)) {       long long time = t - Mn[id];       int shit = (Mn[id] == -1);       add_lazy(id, t);       if (tr - tl == 1) {         time -= shit;         ans += min(M[tl], S[tl] + R[tl] * time);         S[tl] = 0;         return;       }       int pos = upper_bound(seg[id].begin(), seg[id].end(),                             pair<int, int>(time, inf + 1)) -                 seg[id].begin();       ans += ps1[id][pos];       ans += ps2[id][pos] * time;       return;     }     shift(id);     int mid = (tl + tr) >> 1;     query(id << 1, tl, mid, l, r, t);     query(id << 1 | 1, mid, tr, l, r, t);     Mn[id] = min(Mn[id << 1], Mn[id << 1 | 1]);     Mx[id] = max(Mx[id << 1], Mx[id << 1 | 1]);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     memset(Mn, -1, sizeof(Mn));     memset(Mx, -1, sizeof(Mx));     cin >> n;     for (int i = 1; i <= n; i++)       cin >> S[i] >> M[i] >> R[i], D[i] = (R[i] ? (M[i] + R[i] - 1) / R[i] : inf);     Build(1, 1, n + 1);     cin >> m;     while (m--) {       cin >> t >> l >> r;       ans = 0;       query(1, 1, n + 1, l, r + 1, t);       cout << ans <<   n ;     }     return 0;   }   