func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 100010;   const int INF = 0x7f7f7f7f;   const double pi = 4.0 * atan(1.0);   int cases;   struct Segment_Tree {     long long lazy[MAXN << 2];     long long data[MAXN << 2];     long long flag[MAXN << 2];     void pushup(int o) {       data[o] = data[(o << 1)] + data[(o << 1) | 1];       if (flag[(o << 1)] != flag[(o << 1) | 1]) {         flag[o] = 0;       } else {         flag[o] = flag[(o << 1)];       }     }     void setlazy(int o, int m, long long v) {       lazy[o] += v;       data[o] += m * v;     }     void pushdown(int o, int m) {       if (lazy[o]) {         setlazy((o << 1), m - (m >> 1), lazy[o]);         setlazy((o << 1) | 1, m >> 1, lazy[o]);         flag[(o << 1)] = flag[(o << 1) | 1] = flag[o];         lazy[o] = 0;       }     }     void build_tree(int o, int l, int r) {       if (l == r) {         flag[o] = l;         return;       }       int mid = (l + r) >> 1;       build_tree((o << 1), l, mid);       build_tree((o << 1) | 1, mid + 1, r);       pushup(o);     }     void update(int o, int l, int r, int x, int y, long long v) {       if (x <= l && r <= y && flag[o] != 0) {         lazy[o] += abs(flag[o] - v);         data[o] += (long long)(r - l + 1) * abs(flag[o] - v);         flag[o] = v;         return;       }       pushdown(o, r - l + 1);       int mid = (l + r) >> 1;       if (x <= mid) update((o << 1), l, mid, x, y, v);       if (y > mid) update((o << 1) | 1, mid + 1, r, x, y, v);       pushup(o);     }     long long query(int o, int l, int r, int x, int y) {       if (x <= l && r <= y) {         return data[o];       }       pushdown(o, r - l + 1);       int mid = (l + r) >> 1;       if (y <= mid) return query((o << 1), l, mid, x, y);       if (x > mid) return query((o << 1) | 1, mid + 1, r, x, y);       return query((o << 1), l, mid, x, y) +              query((o << 1) | 1, mid + 1, r, x, y);     }   } segtree;   int main() {     int n, m, op, x, y;     long long z;     scanf( %d%d , &n, &m);     segtree.build_tree(1, 1, n);     for (int i = 0; i < m; i++) {       scanf( %d , &op);       if (op == 1) {         scanf( %d%d%lld , &x, &y, &z);         segtree.update(1, 1, n, x, y, z);       } else if (op == 2) {         scanf( %d%d , &x, &y);         printf( %lld n , segtree.query(1, 1, n, x, y));       }     }   }   