func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long N = 1 << 17;   const long long MN = N;   long long s[MN];   long long m[MN];   long long rr[MN];   bool st[2 * N];   long long tme[2 * N];   long long lz[2 * N];   long long nn;   vector<pair<long long, pair<long long, long long> > > manaFull[2 * N];   struct second {     long long s, m, r;   };   void f1(long long k, long long l, long long r) {     for (long long i = l; i <= r; ++i) {       if (rr[i]) {         manaFull[k].push_back({m[i] / rr[i] + !!(m[i] % rr[i]), {m[i], rr[i]}});       } else {         manaFull[k].push_back({1e18, {m[i], rr[i]}});       }     }     sort(manaFull[k].begin(), manaFull[k].end());     for (long long i = 1; i < manaFull[k].size(); ++i) {       manaFull[k][i].second.first += manaFull[k][i - 1].second.first;     }     for (long long i = (long long)manaFull[k].size() - 1; i > 0; --i) {       manaFull[k][i - 1].second.second += manaFull[k][i].second.second;     }     if (l == r) return;     long long mid = (l + r) / 2;     f1(k * 2, l, mid);     f1(k * 2 + 1, mid + 1, r);   }   long long getFirstNotFull(long long k, long long t) {     long long lo = 0;     long long hi = (long long)manaFull[k].size() - 1;     long long res = hi + 1;     while (lo <= hi) {       long long mid = (lo + hi) / 2;       if (manaFull[k][mid].first > t) {         hi = mid - 1;         res = mid;       } else {         lo = mid + 1;       }     }     return res;   }   void lol(long long k, long long l, long long r, long long t) {     if (l < r && lz[k]) {       lz[k] = 0;       lz[k * 2] = 1;       lz[k * 2 + 1] = 1;       tme[k * 2] = tme[k];       tme[k * 2 + 1] = tme[k];     }   }   bool eka[2 * N];   long long absorbMana(long long k, long long l, long long r, long long x,                        long long y, long long t) {     long long res = 0;     if (l > y || r < x) return 0;     if (l >= x && r <= y && lz[k]) {       long long firstNotFull = getFirstNotFull(k, t - tme[k]);       if (firstNotFull != 0) {         res += manaFull[k][firstNotFull - 1].second.first;       }       long long sz = r - l + 1;       if (firstNotFull != sz)         res += (manaFull[k][firstNotFull].second.second) * (t - tme[k]);       if (eka[k]) {         eka[k] = 0;         res = min(m[k - N], s[k - N] + (t - tme[k]) * rr[k - N]);       }       lz[k] = 1;       tme[k] = t;       return res;     }     lol(k, l, r, t);     long long mid = (l + r) / 2;     long long q = absorbMana(k * 2, l, mid, x, y, t);     long long w = absorbMana(k * 2 + 1, mid + 1, r, x, y, t);     if (l >= x && r <= y) {       lz[k] = 1;       tme[k] = t;     }     return q + w;   }   int main() {     long long n;     ios_base::sync_with_stdio(0);     cin.tie(0);     cin >> n;     nn = n;     for (long long i = 0; i < n; ++i) {       cin >> s[i] >> m[i] >> rr[i];       lz[i + N] = 1;       eka[i + N] = 1;     }     f1(1, 0, N - 1);     long long m;     cin >> m;     for (long long i = 0; i < m; ++i) {       long long t, l, r;       cin >> t >> l >> r;       cout << absorbMana(1, 0, N - 1, l - 1, r - 1, t) <<   n ;     }   }   