struct S{ ll x,y; void operator=(int){} S operator+=(int v){ y+=v; return *this; } }; void segtree_pg_func(S&r,S&a,S&b){ r={min(a.x,a.y+b.x),a.y+b.y}; } ll n,a[2d5],q,k,l,r,c; segtree_pgt; { 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.change(l,t[l]+=c); t.change(r,t[r]+=-c); }else{ wt(t.get(0,l+1).y+t.get(l+1,r+1).x); } } }