1 #include<iostream> 2 #define ll long long 3 using namespace std; 4 ll n,m; 5 struct sb 6 { 7 ll l,r,sum,add; 8 }t[1000100*4]; 9 ll aa[1000100]; 10 void build(ll a,ll b,ll k) 11 { 12 t[k].l=a; t[k].r=b; 13 if (a==b) 14 { 15 t[k].sum=aa[a]; 16 return; 17 } 18 else 19 { 20 ll mid=(a+b)/2; 21 build(a,mid,k*2); 22 build(mid+1,b,k*2+1); 23 t[k].sum=t[k*2].sum+t[k*2+1].sum; 24 } 25 26 } 27 void lazy(ll k,ll m) 28 { 29 if (t[k].add) 30 { 31 t[k*2].add+=t[k].add; 32 t[k*2+1].add+=t[k].add; 33 t[k*2].sum+=t[k].add*(m-(m/2)); 34 t[k*2+1].sum+=t[k].add*(m/2); 35 t[k].add=0; 36 } 37 } 38 void change(ll x,ll y,ll z,ll k) 39 { 40 if (t[k].l>=x&&t[k].r<=y) 41 { 42 t[k].add+=z; 43 t[k].sum+=z*(t[k].r-t[k].l+1); 44 return; 45 } 46 lazy(k,t[k].r-t[k].l+1); 47 ll mid=(t[k].l+t[k].r)/2; 48 if (y<=mid) change(x,y,z,k*2); 49 else if (x>mid) change(x,y,z,k*2+1); 50 else 51 { 52 change(x,mid,z,k*2); 53 change(mid+1,y,z,k*2+1); 54 } 55 t[k].sum=t[k*2].sum+t[k*2+1].sum; 56 } 57 ll check(ll x,ll y,ll k) 58 { 59 if (t[k].l==x&&t[k].r==y) 60 return t[k].sum; 61 lazy(k,t[k].r-t[k].l+1); 62 ll mid=(t[k].l+t[k].r)/2; 63 if (y<=mid) return check(x,y,k*2); 64 else if (x>mid) return check(x,y,k*2+1); 65 else 66 return check(x,mid,k*2)+check(mid+1,y,k*2+1); 67 } 68 int main () 69 { 70 cin>>n; 71 for (ll i=1;i<=n;i++) 72 cin>>aa[i]; 73 build(1,n,1); 74 cin>>m; 75 for (ll i=1,w,x,y,z;i<=m;i++) 76 { 77 cin>>w; 78 if (w==1) 79 { 80 cin>>x>>y>>z; 81 change(x,y,z,1); 82 } 83 if (w==2) 84 { 85 cin>>x>>y; 86 cout<<check(x,y,1)<<endl; 87 } 88 } 89 }