struct V{ ll n,s,t,a; }; inline void segtree_pg_func(V&r,V a,V b){ r={ a.n+b.n, a.s+a.a*b.n+b.s, a.t+b.t+a.a*(2b.s+a.a*b.n), a.a+b.a, }; } segtree_pgt; inline void add(int i,ll a){ t[i].a+=a; t.build(i+t.N); } { ll n,a; rd(n); t.walloc(n+1); t.setN(n+1,0,0); rep(i,n)rd(a),t[i+1]={1,a,a*a,0}; t.build(); rd(n); rep(n){ ll x,l,r; rd(x,l,r++); if(x==1){ rd(x); add(l-1,x); add(r-1,-x); }else{ wt(t.get(0,r).t-t.get(0,l).t); } } }