由于树状数组是一个维护一个前缀和,
那么差分一下,区间$[l,r]$加减,就变成在树状数组d上修改$d[r+1](del),d[l](add)$。


#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#define gc getchar()
#define ll long long
using namespace std;
const int N=2e5+5;
template<class o>
inline void qr(o &x)
{
    x=0;char c=gc;int f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc;}
    while(c>='0'&&c<='9'){x=x*10+(c^48);c=gc;}
    x*=f;
}
void qw(ll x)
{
    if(x<0)x=-x,putchar('-');
    if(x/10)qw(x/10);
    putchar(x%10+48);
}
ll c[N];int n;
inline void add(int x,ll d){for(;x<=n;x+=x&-x)c[x]+=d;}
inline ll ask(int x){ll ans=0;for(;x;x-=x&-x)ans+=c[x];return ans;}
ll a[N];
int main()
{
    qr(n);int m;qr(m);
    for(int i=1;i<=n;i++)qr(a[i]);
    for(int i=1;i<=m;i++)
    {
        char op[3];int x,l,r;ll d;scanf("%s",op);
        if(op[0]=='Q')qr(x),qw(a[x]+ask(x)),puts("");
        else qr(l),qr(r),qr(d),add(l,d),add(r+1,-d);
    }
    return 0;
}