这个是树状数组的多点修改,单点查询.
...三个题目连着把树状数组的操作演示完了...我知道的
#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; }