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