#include <bits/stdc++.h>
using namespace std;
long long a[100005], cha[100005];
long long tree[100004 * 4];
long long n;
void update(long long pos, long long L, long long R, long long root) {
  if (L == R) {
    long long now = 0;
    if (cha[L - 1] > 0) now += cha[L - 1];
    if (cha[L] < 0) now -= cha[L];
    tree[root] = now;
    return;
  }
  long long mid = L + R >> 1;
  if (pos <= mid)
    update(pos, L, mid, root << 1);
  else
    update(pos, mid + 1, R, root << 1 | 1);
  tree[root] = min(tree[root << 1], tree[root << 1 | 1]);
}
long long query(long long l, long long r, long long L, long long R,
                long long root) {
  if (l <= L && R <= r) return tree[root];
  long long mid = L + R >> 1;
  if (r <= mid)
    return query(l, r, L, mid, root << 1);
  else if (l > mid)
    return query(l, r, mid + 1, R, root << 1 | 1);
  else
    return min(query(l, mid, L, mid, root << 1),
               query(mid + 1, r, mid + 1, R, root << 1 | 1));
}
int main() {
  scanf("%lld", &n);
  long long sum = 0;
  for (long long i = 0; i < n; i++) scanf("%lld", &a[i]);
  for (long long i = 0; i < n - 1; i++) {
    cha[i] = a[i] - a[i + 1], sum += abs(cha[i]);
    if (i > 0) update(i, 1, n - 2, 1);
  }
  long long q;
  scanf("%lld", &q);
  while (q--) {
    long long op, l, r, x;
    scanf("%lld%lld%lld%lld", &op, &l, &r, &x);
    l--, r--;
    if (op == 1) {
      if (l == r) {
        printf("%lld\n", sum - abs(cha[l - 1]) - abs(cha[l]) +
                             abs(cha[l - 1] - x) + abs(cha[l] + x));
        continue;
      }
      long long s = query(l, r, 1, n - 2, 1);
      if (s > x)
        printf("%lld\n", sum);
      else
        printf("%lld\n", sum + (x - s) * 2);
    } else {
      sum = sum - abs(cha[l - 1]) - abs(cha[r]);
      cha[l - 1] -= x;
      cha[r] += x;
      sum = sum + abs(cha[l - 1]) + abs(cha[r]);
      update(l, 1, n - 2, 1);
      update(r, 1, n - 2, 1);
      if (l - 1 >= 1) update(l - 1, 1, n - 2, 1);
      if (r + 1 <= n - 2) update(r + 1, 1, n - 2, 1);
    }
  }
}
