func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100005, inf = 2e9, n = 100000;   struct seg {     int fl[N << 2], m1[N << 2], m2[N << 2], sz[N << 2], tg[N << 2], c[N << 2];     long long tr[N << 2];     void build(int k, int l, int r) {       fl[k] = 0;       m1[k] = inf;       m2[k] = 0;       sz[k] = r - l + 1;       tr[k] = 1ll * inf * sz[k];       tg[k] = 0;       c[k] = r - l + 1;       if (l == r) return;       int mid = l + r >> 1;       build(k << 1, l, mid);       build(k << 1 | 1, mid + 1, r);     }     void pu(int k) {       if (m1[k << 1] == m1[k << 1 | 1]) {         m1[k] = m1[k << 1];         m2[k] = max(m2[k << 1], m2[k << 1 | 1]);         c[k] = c[k << 1] + c[k << 1 | 1];       } else if (m1[k << 1] > m1[k << 1 | 1]) {         m1[k] = m1[k << 1];         m2[k] = max(m2[k << 1], m1[k << 1 | 1]);         c[k] = c[k << 1];       } else {         m1[k] = m1[k << 1 | 1];         m2[k] = max(m1[k << 1], m2[k << 1 | 1]);         c[k] = c[k << 1 | 1];       }       tr[k] = tr[k << 1] + tr[k << 1 | 1];       fl[k] = (fl[k << 1] & fl[k << 1 | 1]);     }     void pd(int k) {       if (tg[k]) {         if (m1[k << 1] == m1[k << 1 | 1]) {           m1[k << 1] += tg[k];           tg[k << 1] += tg[k];           tr[k << 1] += 1ll * tg[k] * c[k << 1];           fl[k << 1] = 1;           m1[k << 1 | 1] += tg[k];           tg[k << 1 | 1] += tg[k];           tr[k << 1 | 1] += 1ll * tg[k] * c[k << 1 | 1];           fl[k << 1 | 1] = 1;         } else if (m1[k << 1] > m1[k << 1 | 1]) {           m1[k << 1] += tg[k];           tg[k << 1] += tg[k];           tr[k << 1] += 1ll * tg[k] * c[k << 1];           fl[k << 1] = 1;         } else {           m1[k << 1 | 1] += tg[k];           tg[k << 1 | 1] += tg[k];           tr[k << 1 | 1] += 1ll * tg[k] * c[k << 1 | 1];           fl[k << 1 | 1] = 1;         }         tg[k] = 0;       }     }     void upd(int k, int l, int r, int a, int b, int v) {       if (v >= m1[k]) return;       if (l == a && r == b) {         if (v > m2[k]) {           int d = v - m1[k];           m1[k] += d;           tg[k] += d;           tr[k] += 1ll * d * c[k];           fl[k] = 1;           return;         }         pd(k);         int mid = l + r >> 1;         upd(k << 1, l, mid, a, mid, v);         upd(k << 1 | 1, mid + 1, r, mid + 1, b, v);         pu(k);       }       pd(k);       int mid = l + r >> 1;       if (b <= mid)         upd(k << 1, l, mid, a, b, v);       else if (a > mid)         upd(k << 1 | 1, mid + 1, r, a, b, v);       else         upd(k << 1, l, mid, a, mid, v),             upd(k << 1 | 1, mid + 1, r, mid + 1, b, v);       pu(k);     }   } t1, t2;   int q;   long long ask(int k, int l, int r, int a, int b) {     if (t1.tr[k] == 1ll * inf * t1.sz[k] || t2.tr[k] == 1ll * inf * t2.sz[k])       return 0;     if (l == a && r == b) {       if (t1.fl[k] && t2.fl[k]) return t1.tr[k] + t2.tr[k];       t1.pd(k), t2.pd(k);       int mid = l + r >> 1;       return ask(k << 1, l, mid, a, mid) +              ask(k << 1 | 1, mid + 1, r, mid + 1, b);     }     t1.pd(k), t2.pd(k);     int mid = l + r >> 1;     if (b <= mid)       return ask(k << 1, l, mid, a, b);     else if (a > mid)       return ask(k << 1 | 1, mid + 1, r, a, b);     else       return ask(k << 1, l, mid, a, mid) +              ask(k << 1 | 1, mid + 1, r, mid + 1, b);   }   int main() {     t1.build(1, 1, n);     t2.build(1, 1, n);     scanf( %d , &q);     while (q--) {       int t, l, r, v;       scanf( %d%d%d , &t, &l, &r);       r--;       if (t == 1) {         scanf( %d , &v);         if (v > 0)           t1.upd(1, 1, n, l, r, v);         else           t2.upd(1, 1, n, l, r, -v);       } else         printf( %lld n , ask(1, 1, n, l, r));     }     return 0;   }   