#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 2e5 + 5;
const long long MOD = 1e9 + 7;
long long seg[MAXN * 3], lazy[MAXN * 3];
long long a[MAXN];
void push(long long p, long long l, long long r) {
  if (lazy[p]) {
    seg[p] += lazy[p];
    if (l != r) {
      lazy[p * 2] += lazy[p];
      lazy[p * 2 + 1] += lazy[p];
    }
    lazy[p] = 0;
  }
}
void build(long long p, long long l, long long r) {
  if (l == r) {
    seg[p] = a[l];
    return;
  }
  long long mid = (l + r) >> 1;
  build(p * 2, l, mid);
  build(p * 2 + 1, mid + 1, r);
  seg[p] = min(seg[p * 2], seg[p * 2 + 1]);
}
void update(long long p, long long l, long long r, long long a, long long b,
            long long val) {
  push(p, l, r);
  if (l > b or r < a) return;
  if (l >= a and r <= b) {
    lazy[p] = val;
    push(p, l, r);
    return;
  }
  long long mid = (l + r) >> 1;
  update(p * 2, l, mid, a, b, val);
  update(p * 2 + 1, mid + 1, r, a, b, val);
  seg[p] = min(seg[p * 2], seg[p * 2 + 1]);
}
long long get(long long p, long long l, long long r, long long a, long long b) {
  if (l > b or r < a) return 1e18;
  push(p, l, r);
  if (l >= a and r <= b) return seg[p];
  if (l > b || r < a) return 0;
  long long mid = (l + r) >> 1;
  long long p1 = get(p * 2, l, mid, a, b);
  long long p2 = get(p * 2 + 1, mid + 1, r, a, b);
  return min(p1, p2);
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  for (long long i = 1; i <= n; i++) cin >> a[i];
  build(1, 1, n);
  long long m;
  cin >> m;
  cin.ignore();
  while (m--) {
    vector<long long> q;
    string s;
    getline(cin, s);
    stringstream iss;
    iss << s;
    long long x;
    while (iss >> x) {
      q.push_back(x);
    }
    ++q[0];
    ++q[1];
    if ((long long)q.size() == 3) {
      long long l = q[0];
      long long r = q[1];
      long long v = q[2];
      if (l > r) {
        long long l1 = l;
        long long r1 = n;
        long long l2 = 1;
        long long r2 = r;
        update(1, 1, n, l1, r1, v);
        update(1, 1, n, l2, r2, v);
      }
      update(1, 1, n, l, r, v);
    } else {
      long long l = q[0];
      long long r = q[1];
      if (l > r) {
        long long l1 = l;
        long long r1 = n;
        long long l2 = 1;
        long long r2 = r;
        cout << min(get(1, 1, n, l1, r1), get(1, 1, n, l2, r2)) << '\n';
      } else
        cout << get(1, 1, n, l, r) << '\n';
    }
  }
}
