洛谷 P3374 【模板】树状数组 1(单点更新+单点求值)
作者:互联网
题目:
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+100;
int n,m,tree[N];
int lowbit(int i)
{
return i&(-i);
}
void updata(int i,int k)
{
while(i<=n)
{
tree[i]+=k;
i+=lowbit(i);
}
}
int quiry(int i)
{
int res=0;
while(i>0)
{
res+=tree[i];
i-=lowbit(i);
}
return res;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
int k;
cin>>k;
updata(i,k);
}
while(m--)
{
int t,x;
cin>>t>>x;
if(t==1){
int k;
cin>>k;
updata(x,k);
/*for(int i=1;i<=n;i++) cout<<tree[i]<<" ";
cout<<endl;*/
}
else{
int y;
cin>>y;
cout<<quiry(y)-quiry(x-1)<<endl;
}
}
return 0;
}
#总结:
这类题型类似于求前缀和,每一次更新或者求值都需要从x开始,通过递减lowbit(x)的方式修改
标签:洛谷,int,lowbit,tree,cin,updata,res,求值,单点 来源: https://blog.csdn.net/Lzhzl211/article/details/114802800