#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
long long sum[N * 4], mi[N * 4], lef[N * 4], rig[N * 4];
long long a[N];
long long mx(long long v) { return max(v, -v); }
void push_up(int root) {
  sum[root] = sum[root << 1] + sum[root << 1 | 1];
  mi[root] = min(mi[root << 1], mi[root << 1 | 1]);
}
void build(int l, int r, int root) {
  if (l == r) {
    sum[root] = mx(a[l]);
    if (l - 1) mi[root] = max(0ll, a[l - 1]) + max(0ll, -a[l]);
    return;
  }
  int mid = l + r >> 1;
  build(l, mid, root << 1);
  build(mid + 1, r, root << 1 | 1);
  push_up(root);
}
int n;
void update(int l, int r, int root, int p, long long v) {
  if (l == r) {
    a[l] += v;
    sum[root] = mx(a[l]);
    if (p - 1) mi[root] = max(0ll, a[l - 1]) + max(0ll, -a[l]);
    return;
  }
  int mid = l + r >> 1;
  if (mid >= p)
    update(l, mid, root << 1, p, v);
  else
    update(mid + 1, r, root << 1 | 1, p, v);
  push_up(root);
}
long long query(int l, int r, int root, int ql, int qr) {
  if (l >= ql && r <= qr) return mi[root];
  long long ans = 1e18;
  int mid = l + r >> 1;
  if (mid >= ql) ans = query(l, mid, root << 1, ql, qr);
  if (mid < qr) ans = min(ans, query(mid + 1, r, root << 1 | 1, ql, qr));
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]), a[i - 1] -= a[i];
  build(1, n - 1, 1);
  int q;
  scanf("%d", &q);
  while (q--) {
    int op, l, r;
    long long x;
    scanf("%d%d%d%lld", &op, &l, &r, &x);
    if (op - 2) {
      if (l == r)
        printf("%lld\n", sum[1] - mx(a[l - 1]) + mx(a[l - 1] - x) - mx(a[l]) +
                             mx(a[l] + x));
      else
        printf("%lld\n",
               sum[1] + max(0ll, 2 * x - 2 * query(1, n - 1, 1, l, r)));
    } else {
      update(1, n - 1, 1, l - 1, -x), update(1, n - 1, 1, r, x);
      if (l + 1 < n) update(1, n - 1, 1, l, 0);
      if (r + 1 < n) update(1, n - 1, 1, r + 1, 0);
    }
  }
  return 0;
}
