1 # include<cstdio>
2 # include<iostream>
3
4 using namespace std;
5
6 # define MAX 100004
7 # define lid id<<1
8 # define rid id<<1|1
9
10 typedef long long LL;
11 int n;
12
13 struct Segtree
14 {
15 int l,r;
16 LL lazy,sum;
17 inline int len()
18 {
19 return r-l+1;
20 }
21 }tree[MAX*4];
22
23 int a[MAX];
24
25 void push_up( int id )
26 {
27 tree[id].sum = tree[rid].sum+tree[lid].sum;
28 }
29
30 void push_down( int id )
31 {
32 if ( tree[id].lazy==0 )
33 return;
34 tree[lid].lazy += tree[id].lazy;
35 tree[rid].lazy += tree[id].lazy;
36 tree[lid].sum += tree[id].lazy*tree[lid].len();
37 tree[rid].sum += tree[id].lazy*tree[rid].len();
38 tree[id].lazy = 0;
39 }
40
41 void build( int id,int l,int r )
42 {
43 tree[id].l = l; tree[id].r = r;
44 if ( l==r )
45 {
46 tree[id].sum = a[l];
47 return;
48 }
49 int mid = (tree[id].l+tree[id].r)/2;
50 build(lid,l,mid);
51 build(rid,mid+1,r);
52 push_up(id);
53 }
54
55 void update( int id,int l,int r,int val )
56 {
57 if ( tree[id].l==l&&tree[id].r==r )
58 {
59 tree[id].lazy += val;
60 tree[id].sum += 1LL*val*tree[id].len();
61 return;
62 }
63 push_down(id);
64 int mid = ( tree[id].l+tree[id].r )/2;
65 if ( r <= mid )
66 update(lid,l,r,val);
67 else if ( l > mid )
68 update(rid,l,r,val);
69 else
70 {
71 update(lid,l,mid,val);
72 update(rid,mid+1,r,val);
73 }
74 push_up(id);
75 }
76
77 LL query( int id,int l,int r )
78 {
79 if ( tree[id].l==l&&tree[id].r==r )
80 {
81 return tree[id].sum;
82 }
83 push_down(id);
84 int mid = ( tree[id].l+tree[id].r )/2;
85 if ( r <= mid )
86 return query(lid,l,r);
87 else if ( l > mid )
88 return query(rid,l,r);
89 else
90 return query(lid,l,mid)+query(rid,mid+1,r);
91 }
92
93 int main(void)
94 {
95 while ( scanf("%d",&n)!=EOF )
96 {
97 for ( int i = 1;i <= n;i++ )
98 {
99 scanf("%d",&a[i]);
100 }
101 build(1,1,n);
102 int q; scanf("%d",&q);
103 while( q-- )
104 {
105 int ll,rr,t3; scanf("%d%d%d",&ll,&rr,&t3);
106 update(1,ll,rr,t3);
107 LL ans = query(1,ll,rr);
108 printf("%lld\n",ans);
109 }
110 }
111
112 return 0;
113 }