```cpp
#include<bits/stdc++.h>
using namespace std;
#define MAXN 400005
struct Node
{
long long sum,k,d;//Á½¸ölazy±ê¼Ç£¬Ê×ÏîºÍ¹«²î£¬¶¼ÊǿɼӵÄ
}segtree[MAXN];int n,m;
inline void pushup(int cur)
{
segtree[cur].sum=segtree[cur<<1].sum+segtree[cur<<1|1].sum;
return;
}
inline void build(int cur,int left,int right)
{
segtree[cur].k=segtree[cur].d=0;
if(left==right)
{
scanf("%lld",&segtree[cur].sum);
return;
}
int mid=(left+right)>>1;
build(cur<<1,left,mid);
build(cur<<1|1,mid+1,right);
pushup(cur);
return ;
}
inline void pushdown(int cur,int left,int right)
{
if(segtree[cur].k==0)return;
segtree[cur<<1].d+=segtree[cur].d;segtree[cur<<1|1].d+=segtree[cur].d;
int mid=(left+right)>>1;
segtree[cur<<1].sum+=(segtree[cur].k+segtree[cur].k+segtree[cur].d*(mid-left))*(mid-left+1)/2;
segtree[cur<<1|1].sum+=(segtree[cur].k+segtree[cur].d*(mid-left+1)+ segtree[cur].k+segtree[cur].d*(right-left))*(right-mid)/2;
segtree[cur<<1].k+=segtree[cur].k;segtree[cur<<1|1].k+=(segtree[cur].k+segtree[cur].d*(mid-left+1));//×Ô¼ºÍÆÒ»ÏÂ
segtree[cur].k=segtree[cur].d=0;
return;
}
inline void add(int l,int r,int L,int R,long long k1,long long d1,int cur)
{
if(L<=l&&r<=R)
{
segtree[cur].sum+=(k1+d1*(l-L)+k1+d1*(r-L))*(r-l+1)/2;
segtree[cur].k+=k1+d1*(l-L);//Ò»¶¨ÒªÕâôËã
segtree[cur].d+=d1;
return;
}
int mid=(l+r)>>1;
pushdown(cur,l,r);
if(L<=mid)add(l,mid,L,R,k1,d1,cur<<1);
if(R>mid)add(mid+1,r,L,R,k1,d1,cur<<1|1);
pushup(cur);
return;
}
inline long long query(int l,int r,int L,int R,int cur)
{
if(L<=l&&r<=R)return segtree[cur].sum;
int mid=(l+r)>>1;
pushdown(cur,l,r);long long ans=0;
if(L<=mid) ans+=query(l,mid,L,R,cur<<1);
if(R>mid) ans+=query(mid+1,r,L,R,cur<<1|1);
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
build(1,1,n);int x,L,R;long long K,D;
while(m--)
{
scanf("%d%d",&x,&L);
if(x==1)
{
scanf("%d%lld%lld",&R,&K,&D);
add(1,n,L,R,K,D,1);
}
else if(x==2)
{
printf("%lld\n",query(1,n,L,L,1));
}
}
return 0;
}
```
by hu1029282594 @ 2018-02-20 19:23:59
rp--?
by hu1029282594 @ 2018-02-20 19:24:14
有大佬吗
by hu1029282594 @ 2018-02-21 22:44:41