单点修改区间查询

解题思路
树状数组模板题,不解释。
code
#include<iostream>
#include<cstdio>
#define int long long
#define lb(x) (x&(-x))
using namespace std;
int n,q;
int c[1000010];
void in(int x,int y)
{
for(;x<=n;x+=lb(x))
c[x]+=y;
}
int fd(int x)
{
int s=0;
for(;x;x-=lb(x))
s+=c[x];
return s;
}
signed main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
int a;
scanf("%lld",&a);
in(i,a);
}
while(q--)
{
int t,x,y;
scanf("%lld%lld%lld",&t,&x,&y);
if(t==1)
in(x,y);
else
cout<<fd(y)-fd(x-1)<<endl;
}
}

本文介绍了一道关于单点修改区间查询的经典树状数组题目,并提供了完整的代码实现。通过本例,读者可以学习到如何利用树状数组解决这类问题的基本思路。
199

被折叠的 条评论
为什么被折叠?



