rt,RE三个
#include<bits/stdc++.h>
using namespace std;
const long long maxn=1e5;
int a[5*maxn+2];
struct tree
{
int l,r;
long long pre,add;
}t[6*maxn+2];
void bulid(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r)
{
t[p].pre=a[l];
return;
}
int mid=l+r>>1;
bulid(p*2,l,mid);
bulid(p*2+1,mid+1,r);
t[p].pre=t[p*2].pre+t[p*2+1].pre;
}
void change(int p,int x,int y,int z)
{
if(x<=t[p].l && y>=t[p].r)
{
t[p].pre+=(long long)z*(t[p].r-t[p].l+1);
return;
}
int mid=t[p].l+t[p].r>>1;
if(x<=mid) change(p*2,x,y,z);
if(y>mid) change(p*2+1,x,y,z);
t[p].pre=t[p*2].pre+t[p*2+1].pre;
}
long long find(int p,int x,int y)
{
if(x<=t[p].l && y>=t[p].r) return t[p].pre;
int mid=t[p].l+t[p].r>>1;
long long ans=0;
if(x<=mid) ans+=find(p*2,x,y);
if(y>mid) ans+=find(p*2+1,x,y);
return ans;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i)
cin>>a[i];
bulid(1,1,n);
for(int i=1;i<=m;++i)
{
string q;
long long x,y,z;
cin>>q;
if(q=="1")
{
cin>>x>>y;
change(1,x,x,y);
}
else
{
cin>>x>>y;
cout<<find(1,x,y)<<endl;
}
}
}