#include <bits/stdc++.h>
using namespace std;
int a[200005];
class segtree {
 public:
  static const long long pow2 = 18;
  static const long long inf = 10000000000000;
  static const long long size = 1 << pow2;
  long long data[size * 2], inc[size * 2];
  void apply(size_t node) {
    if (node < size) {
      data[node << 1] += inc[node];
      inc[node << 1] += inc[node];
      data[node << 1 | 1] += inc[node];
      inc[node << 1 | 1] += inc[node];
    }
    inc[node] = 0;
  }
  void refresh(size_t node) {
    if (node == 0) return;
    apply(node);
    data[node] = min(data[node << 1], data[node << 1 | 1]);
    refresh(node >> 1);
  }
  void rec_update_range(size_t node, size_t nl, size_t nr, int ql, int qr,
                        long long v) {
    if (ql > nr || qr < nl) return;
    if (ql <= nl && qr >= nr) {
      inc[node] += v;
      data[node] += v;
      refresh(node >> 1);
      return;
    }
    int mid = (nl + nr) >> 1;
    if (ql <= mid) rec_update_range(node << 1, nl, mid, ql, qr, v);
    if (qr > mid) rec_update_range(node << 1 | 1, mid + 1, nr, ql, qr, v);
  }
  long long rec_query(size_t node, size_t nl, size_t nr, int ql, int qr) {
    if (ql > nr || qr < nl) return inf;
    if (ql <= nl && qr >= nr) return data[node];
    int mid = (nl + nr) >> 1;
    long long res = inf;
    apply(node);
    if (ql <= mid) res = min(res, rec_query(node << 1, nl, mid, ql, qr));
    if (qr > mid) res = min(res, rec_query(node << 1 | 1, mid + 1, nr, ql, qr));
    return res;
  }
  void update(int qn, long long v) {
    data[qn + size] += v;
    refresh((qn + size) >> 1);
  }
  void update_range(int ql, int qr, long long v) {
    rec_update_range(1, 0, size - 1, ql, qr, v);
  }
  int query(int ql, int qr) { return rec_query(1, 0, size - 1, ql, qr); }
};
segtree tree;
int main() {
  int n, m, lf, rg;
  long long v;
  char c;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
    tree.update(i, a[i]);
  }
  for (int i = n; i < segtree::size; i++) tree.update(i, segtree::inf);
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    scanf("%d %d%c", &lf, &rg, &c);
    if (c == ' ') {
      scanf("%I64d", &v);
      if (lf <= rg)
        tree.update_range(lf, rg, v);
      else {
        tree.update_range(lf, n - 1, v);
        tree.update_range(0, rg, v);
      }
    } else {
      long long res;
      if (lf <= rg)
        res = tree.query(lf, rg);
      else
        res = min(tree.query(lf, n - 1), tree.query(0, rg));
      printf("%I64d\n", res);
    }
  }
  return 0;
}
