#include <bits/stdc++.h>
using namespace std;
struct pp {
  long long nu, we;
} c;
struct Info {
  long long l, r, ta, nu;
  pp a;
} a[1000010];
long long b[100010], n, ansn, m, l, r, opt, x, sum;
pp mi(pp a, pp b) {
  if (a.nu < b.nu) return b;
  return a;
}
pp ga(long long nu, long long l, long long r) {
  if (a[nu].l == l && a[nu].r == r) return a[nu].a;
  long long mid = (a[nu].l + a[nu].r) / 2;
  pp u;
  u.nu = -1e18;
  if (l <= mid) u = mi(u, ga(nu * 2, l, min(mid, r)));
  if (r > mid) u = mi(u, ga(nu * 2 + 1, max(mid + 1, l), r));
  return u;
}
void build(long long x, long long l, long long r) {
  a[x].l = l;
  a[x].r = r;
  a[x].ta = 0;
  if (l == r) {
    a[x].nu = b[l];
    a[x].a.we = l;
    if (l != 0 && l != n + 1) {
      a[x].a.nu = b[l] - max(b[l + 1], b[l - 1]);
    } else
      a[x].a.nu = -1e18;
  } else {
    build(x * 2, l, (l + r) / 2);
    build(x * 2 + 1, (l + r) / 2 + 1, r);
    if (a[x * 2].a.nu >= a[x * 2 + 1].a.nu)
      a[x].a = a[x * 2].a;
    else
      a[x].a = a[x * 2 + 1].a;
  }
}
void ya(long long x) {
  if (a[x].ta != 0 && a[x].l != a[x].r) {
    a[x * 2].ta += a[x].ta;
    a[x * 2 + 1].ta += a[x].ta;
    a[x].ta = 0;
  }
}
long long que(long long nu, long long x) {
  if (a[nu].l == a[nu].r) {
    a[nu].nu += a[nu].ta;
    a[nu].ta = 0;
    return a[nu].nu;
  } else {
    ya(nu);
    if (x <= (a[nu].l + a[nu].r) / 2) return que(nu * 2, x);
    return que(nu * 2 + 1, x);
  }
}
void add(long long nu, long long l, long long r, long long x) {
  if (a[nu].l == l && a[nu].r == r) {
    a[nu].ta += x;
    return;
  }
  long long mid = (a[nu].l + a[nu].r) / 2;
  if (l <= mid) add(nu * 2, l, min(mid, r), x);
  if (r > mid) add(nu * 2 + 1, max(mid + 1, l), r, x);
}
void chang(long long nu, long long x, long long y) {
  if (a[nu].l == a[nu].r) {
    a[nu].a.nu = y;
  } else {
    if (x <= (a[nu].l + a[nu].r) / 2)
      chang(nu * 2, x, y);
    else
      chang(nu * 2 + 1, x, y);
    if (a[nu * 2].a.nu >= a[nu * 2 + 1].a.nu)
      a[nu].a = a[nu * 2].a;
    else
      a[nu].a = a[nu * 2 + 1].a;
  }
}
long long cou(pp a) {
  return ansn - abs(que(1, a.we - 1) - que(1, a.we)) -
         abs(que(1, a.we + 1) - que(1, a.we)) +
         abs(que(1, a.we - 1) - que(1, a.we) - x) +
         abs(que(1, a.we + 1) - que(1, a.we) - x);
}
void chan(long long x) {
  if (x < 1 || x > n) return;
  long long y = que(1, x) - max(que(1, x + 1), que(1, x - 1));
  chang(1, x, y);
}
int main() {
  scanf("%d", &n);
  for (long long i = 1; i <= n; i++) scanf("%d", &b[i]);
  b[0] = b[1];
  b[n + 1] = b[n];
  for (long long i = 1; i < n; i++) ansn += abs(b[i + 1] - b[i]);
  build(1, 0, n + 1);
  scanf("%d", &m);
  while (m--) {
    scanf("%d %d %d %d", &opt, &l, &r, &x);
    if (opt == 1) {
      c = ga(1, l, r);
      if (c.nu >= 0)
        cout << ansn + x * 2 << endl;
      else {
        sum = cou(c);
        if (l <= c.we - 1) sum = max(sum, cou(ga(1, l, c.we - 1)));
        if (c.we + 1 <= r) sum = max(sum, cou(ga(1, c.we + 1, r)));
        cout << sum << endl;
      }
    } else {
      ansn -= abs(que(1, l - 1) - que(1, l));
      ansn -= abs(que(1, r + 1) - que(1, r));
      if (l == 1) l--;
      if (r == n) r--;
      add(1, l, r, x);
      if (l == 0) l++;
      if (r == n + 1) r++;
      chan(l);
      chan(l - 1);
      chan(r);
      chan(r + 1);
      ansn += abs(que(1, l - 1) - que(1, l));
      ansn += abs(que(1, r + 1) - que(1, r));
    }
  }
  return 0;
}
