func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100100;   inline long long int max(long long int a, long long int b) {     return a > b ? a : b;   }   inline long long int min(long long int a, long long int b) {     return a > b ? b : a;   }   inline int read() {     int x = 0;     char c = getchar();     while (c <  0  || c >  9 ) c = getchar();     while (c >=  0  && c <=  9 ) x = x * 10 + c -  0 , c = getchar();     return x;   }   long long int sum[maxn * 4], mq[maxn * 4], dl[maxn * 4], dr[maxn * 4];   int lb[maxn * 4], rb[maxn * 4];   int N, M;   int a[maxn];   inline void update(int i) {     if (lb[i] == rb[i]) {       sum[i] = fabs(dr[i]);       mq[i] = max(dl[i], 0) + max(dr[i], 0);       return;     }     sum[i] = sum[i << 1] + sum[(i << 1) + 1];     mq[i] = min(mq[i << 1], mq[(i << 1) + 1]);   }   inline void updateall(int i) {     while (i > 1) {       update(i);       i = i >> 1;     }     update(1);   }   void build(int i, int l, int r) {     lb[i] = l;     rb[i] = r;     if (l == r) {       dl[i] = a[l - 1] - a[l];       dr[i] = a[l + 1] - a[l];       sum[i] = fabs(dr[i]);       mq[i] = max(dl[i], 0) + max(dr[i], 0);     } else {       int m = (l + r) >> 1;       build(i << 1, l, m);       build((i << 1) + 1, m + 1, r);       update(i);     }   }   long long int getmq(int i, int l, int r) {     if (l == lb[i] && r == rb[i]) return mq[i];     int m = (lb[i] + rb[i]) >> 1;     long long int re = 1e9 + 10;     if (l <= m) re = min(re, getmq(i << 1, l, min(m, r)));     if (r > m) re = min(re, getmq((i << 1) + 1, max(m + 1, l), r));     return re;   }   int find(int x, int i) {     if (lb[i] == rb[i] && lb[i] == x)       return i;     else if (x <= ((lb[i] + rb[i]) >> 1))       return find(x, i << 1);     else       return find(x, (i << 1) + 1);   }   inline long long int solve1(int l, int r, int x) {     if (l == r) {       int p = find(l, 1);       return fabs(dl[p] - x) + fabs(dr[p] - x) - fabs(dl[p]) - fabs(dr[p]) +              sum[1];     } else {       return max(0, 2 * x - 2 * getmq(1, l, r)) + sum[1];     }   }   inline void solve2(int l, int r, int x) {     int p = find(l, 1);     dl[p] -= x;     updateall(p);     p = find(l - 1, 1);     dr[p] += x;     updateall(p);     p = find(r, 1);     dr[p] -= x;     updateall(p);     p = find(r + 1, 1);     dl[p] += x;     updateall(p);   }   int main() {     int i, j, k, x, y;     N = read();     for (i = 1; i <= N; i++) a[i] = read();     a[N + 1] = a[N];     a[0] = a[1];     build(1, 1, N);     M = read();     for (i = 1; i <= M; i++) {       j = read();       k = read();       x = read();       y = read();       if (j == 1) {         printf( %I64d n , solve1(k, x, y));       } else {         solve2(k, x, y);       }     }   }   