func_code_string: #include <bits/stdc++.h>   using namespace std;   const int sN = 1 << 19;   long long v[sN], d[sN], l[sN], r[sN], s[sN], w[sN];   int n, m;   int t, Left, Right;   long long x;   void down(int a, int c1, int c2) {     d[c1] += d[a];     d[c2] += d[a];     s[c1] += d[a] * w[c1];     s[c2] += d[a] * w[c2];     d[a] = 0;     if (v[a] > 0) v[c1] = v[c2] = v[a];   }   long long get(int a) {     if (Right < l[a] or r[a] < Left) return 0ll;     if (Left <= l[a] and r[a] <= Right) return s[a];     int c1 = a << 1, c2 = c1 + 1;     down(a, c1, c2);     return get(c1) + get(c2);   }   void update(int a) {     if (Right < l[a] or r[a] < Left) return;     if (Left <= l[a] and r[a] <= Right and v[a] > 0) {       long long inc = x - v[a];       if (inc < 0) inc = -inc;       d[a] += inc;       s[a] += inc * w[a];       v[a] = x;       return;     }     int c1 = a << 1, c2 = c1 + 1;     down(a, c1, c2);     update(c1);     update(c2);     s[a] = s[c1] + s[c2];     if (v[c1] == v[c2])       v[a] = v[c1];     else       v[a] = 0;   }   int main() {     scanf( %d %d , &n, &m);     int nn = 1;     for (; nn < n; nn <<= 1)       ;     n = nn--;     for (int i = 1; i <= n; i++)       v[nn + i] = l[nn + i] = r[nn + i] = i, w[nn + i] = 1;     for (int i = nn, j = i << 1; i > 0; i--, j = i << 1)       l[i] = l[j], r[i] = r[j + 1], w[i] = w[j] << 1;     for (; m--;) {       scanf( %d , &t);       if (t == 1) {         scanf( %d %d , &Left, &Right);         scanf( %I64d , &x);         update(1);       } else {         scanf( %d %d , &Left, &Right);         printf( %I64d n , get(1));       }     }     return 0;   }   