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; { rd(n,a(n),q); t.walloc(n+1); t.setN(n+1); t[1..n]={a[0..],0}; t.build(); rep(q){ rd(k,l,r++,c); if(k==1){ t.add(l-1,{0,c}); t.add(r-1,{0,-c}); }else{ wt(t.getProd(0,l).y+t.getProd(l,r).x); } } }