struct S{ ll x,y; void operator=(int){} void operator+=(S a){ y+=a.y; } }; S operator*(S a,S b){ return {min(a.x,a.y+b.x),a.y+b.y}; } ll n,a[2d5],q,k,l,r,c; segtree_Point_Prodt; fenwickf; { rd(n,a(n),q); t.walloc(n+1); t.setN(n+1); t[1..n]={a[0..],0}; t.build(); f.walloc(n,1); rep(q){ rd(k,l--,r,c); if(k==1){ t.add(l,{0,c}); t.add(r,{0,-c}); f.add(l,c); f.add(r,-c); }else{ wt(t.getProd(l+1,r+1).x+f.get(l)); } } }