#include<bits/stdc++.h>
#define up1(a) a << 1
#define up2(a) a << a | 1
using namespace std;
int n,m,op,l,r,X;
const int maxn = 2000000 + 11;
long long in[maxn];
inline int read()
{
register char in = getchar(),f = 0; register int t = 0;
for(;in < '0' || in > '9';in = getchar())if(!(in ^ 45))f = 1;
for(;in >= '0' && in <= '9';in = getchar())
t = (t << 1) + (t << 3) + (in ^ 48);
if(in == ' ')op++; return f ? -t : t;
}
struct node
{
int l; int r;
long long num;
long long add;
}tree[maxn << 1];
void build(int _l,int _r,int ind)
{
tree[ind].l = _l;
tree[ind].r = _r;
if(tree[ind].l == tree[ind].r)
{tree[ind].num = in[_l];return;}
int m1 = (_l + _r) / 2; build(_l,m1,up1(ind));
int m2 = m1 + 1; build(m2,_r,up2(ind));
register long long p1 = tree[up1(ind)].num;
register long long p2 = tree[up2(ind)].num;
tree[ind].num = min(p1,p2);
}
void check(int ind)
{
if(tree[ind].add)
{
tree[up1(ind)].num += tree[ind].add;
tree[up2(ind)].num += tree[ind].add;
tree[up1(ind)].add += tree[ind].add;
tree[up2(ind)].add += tree[ind].add;
tree[ind].add = 0;
}
}
void amend(int l,int r,int ind,int x)
{
if(tree[ind].l >= l && tree[ind].r <= r)
{
tree[ind].num = (tree[ind].num + x);
tree[ind].add = (tree[ind].add + x);
return;
}
check(ind);
if(tree[ind].l == tree[ind].r)return;
if(tree[up1(ind)].r >= l)amend(l,r,up1(ind),x);
if(tree[up2(ind)].l <= r)amend(l,r,up2(ind),x);
register long long p1 = tree[up1(ind)].num;
register long long p2 = tree[up2(ind)].num;
tree[ind].num = min(p1,p2);
}
long long find(int l,int r,int ind)
{
if(tree[ind].l >= l && tree[ind].r <= r)
{ return tree[ind].num; } check(ind);
register long long p1 = LONG_LONG_MAX;
if(tree[ind].l == tree[ind].r)return p1;
if(tree[up1(ind)].r >= l)p1 = min(p1,find(l,r,up1(ind)));
if(tree[up2(ind)].l <= r)p1 = min(p1,find(l,r,up2(ind)));
return p1;
}
void CHECK(int l,int r)
{
if(l <= r) printf("%lld\n",find(l,r,1));
else printf("%lld\n",min(find(l,n,1),find(1,r,1)));
}
void CHECK2(int l,int r,int X)
{
if(l <= r) amend(l,r,1,X);
else amend(l,n,1,X),amend(1,r,1,X);
}
signed main()
{
scanf("%d",&n);
for(int i = 1;i <= n;i++)
scanf("%lld",&in[i]);
build(1,n,1);
scanf("%d",&m);
for(register int i = 1;i <= m;i++)
{
op = 0,l = read(),r = read();l++,r++;
if(op == 2) X = read(),CHECK2(l,r,X);
if(op == 1) CHECK(l,r); op = 0;
}
}
re了第七个点,就离谱