这个是树状数组的多点修改,单点查询.
...三个题目连着把树状数组的操作演示完了...我知道的

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll d[N],sum[N],a[N];
ll n;

int lowbit(int x)
{
    return x&(-x);    
}

void insert(ll pos,ll val)
{
    while(pos<=n)
    {
        sum[pos]+=val;
        pos+=lowbit(pos);
    }
}

ll query(ll pos)
{
    ll res=0;
    while(pos>0)
    {
        res+=sum[pos];
        pos-=lowbit(pos);
    }
    return res;
}

int main()
{
    int m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)   {cin>>a[i]; insert(i,a[i]-a[i-1]);}
    while(m--)
    {
        string s;int b,c,e;
        cin>>s;
        if(s=="Q")
        {
            cin>>b;
            cout<<query(b)<<endl;
        }
        else
        {
            cin>>b>>c>>e;
            insert(b,e);
            insert(c+1,-e);
        }
    }
    return 0;
}