1 #include<bits/stdc++.h>
2 using namespace std;
3 inline int read()
4 {
5 int x=0,f=1;char c=getchar();
6 if(c=='-') f=-1;
7 for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
8 for(;isdigit(c);c=getchar()) x=x*10+c-'0';
9 return x*f;
10 }
11 const int N=100005;
12 int ans,q;
13 int ll,rr,aa1,dd;
14 struct node
15 {
16 int l,r,w,a1,d;
17 }tree[N*4+5];
18 inline void build(int l,int r,int k)
19 {
20 tree[k].l=l;tree[k].r=r;
21 if(l==r)
22 {
23 tree[k].w=read();
24 return;
25 }
26 int mid=l+r>>1;
27 build(l,mid,k*2);
28 build(mid+1,r,k*2+1);
29 tree[k].w=tree[k*2].w+tree[k*2+1].w;
30 }
31 inline void dowm(int k)
32 {
33 int nn=tree[k*2].r-tree[k*2].l+1;
34 int mm=tree[k*2+1].r-tree[k*2+1].l+1;
35 tree[k*2].a1+=tree[k].a1;
36 tree[k*2+1].a1+=tree[k].a1+nn*tree[k].d;
37 tree[k*2].d+=tree[k].d;
38 tree[k*2+1].d+=tree[k].d;
39 tree[k*2].w+=tree[k].a1*nn+nn*(nn-1)/2*tree[k].d;
40 tree[k*2+1].w+=(tree[k].a1+nn*tree[k].d)*mm+mm*(mm-1)/2*tree[k].d;
41 tree[k].a1=0;
42 tree[k].d=0;
43 }
44 inline void add(int k)
45 {
46 int l=tree[k].l;int r=tree[k].r;
47 if(l>=ll&&r<=rr)
48 {
49 tree[k].a1+=aa1+(l-ll)*dd;
50 tree[k].d+=dd;
51 tree[k].w+=(aa1+(l-ll)*dd)*(r-l+1)+(r-l+1)*(r-l)/2*dd;
52 return;
53 }
54 dowm(k);
55 int mid=l+r>>1;
56 if(mid>=ll) add(k*2);
57 if(mid<rr) add(k*2+1);
58 tree[k].w=tree[k*2].w+tree[k*2+1].w;
59 }
60 inline void ask(int k)
61 {
62 int l=tree[k].l;int r=tree[k].r;
63 if(l==q&&r==q)
64 {
65 ans=tree[k].w;
66 return;
67 }
68 dowm(k);
69 int mid=l+r>>1;
70 if(mid>=q) ask(k*2);
71 if(mid<q) ask(k*2+1);
72 }
73 int main()
74 {
75 int n,m;
76 n=read();m=read();
77 build(1,n,1);
78 while(m--)
79 {
80 int opt=read();
81 if(opt==1)
82 {
83
84 ll=read();rr=read();aa1=read();dd=read();
85 add(1);
86 }
87 if(opt==2)
88 {
89 q=read();
90 ask(1);
91 printf("%d\n",ans);
92 }
93 }
94 return 0;
95 }