#include using namespace std; template class SegmentTree { private: int n, sz, h; vector> node; vector lazy; void eval(int k) { if (lazy.at(k)) { node.at(k).first += lazy.at(k); if (k < n) { lazy.at(k * 2) += lazy.at(k), lazy.at(k * 2 + 1) += lazy.at(k); } lazy.at(k) = 0; } } public: SegmentTree(const vector &v) : sz((int) v.size()), h(0) { n = 1; while(n < sz) n *= 2, h++; node.resize(2 * n, pair(numeric_limits::max(), sz)); lazy.resize(2 * n, 0); for (int i = 0; i < sz; i++) { node.at(i + n) = make_pair(v.at(i), i); } for (int i = n - 1; i >= 1; i--) { node.at(i) = min(node.at(2 * i), node.at(2 * i + 1)); } } void range(int a, int b, T x, int k = 1, int l = 0, int r = -1) { if (r < 0) r = n; eval(k); if (b <= l || r <= a) { return; } if (a <= l && r <= b) { lazy.at(k) += x; eval(k); } else { range(a, b, x, 2 * k, l, (l + r) / 2); range(a, b, x, 2 * k + 1, (l + r) / 2, r); node.at(k) = min(node.at(2 * k), node.at(2 * k + 1)); } } pair query(int a, int b) { a += n, b += n - 1; for (int i = h; i > 0; i--) eval(a >> i), eval(b >> i); b++; pair res1 = make_pair(numeric_limits::max(), sz); pair res2 = make_pair(numeric_limits::max(), sz); while(a < b) { if (a & 1) eval(a), res1 = min(res1, node.at(a++)); if (b & 1) eval(--b), res2 = min(res2, node.at(b)); a >>= 1, b >>= 1; } return min(res1, res2); } }; int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int N; cin >> N; vector A(N); for (int i = 0; i < N; i++) cin >> A.at(i); SegmentTree ST(A); int Q; cin >> Q; while (Q--) { int a, b, c, d; cin >> a >> b >> c >> d; if (a == 1) { ST.range(b - 1, c, d); } else { cout << ST.query(b - 1, c).first << "\n"; } } }