洛谷 树状数组1 P3374
代码如下:#include<iostream>using namespace std;int n,m;//n个数,操作数为mint a[500005],tree[500005];//初始数组以及树状数组int lowbit(int x){return x&(-x);}int getsum(int x){//求1-x的区间和int a...
·



代码如下:
#include<iostream>
using namespace std;
int n,m;//n个数,操作数为m
int a[500005],tree[500005];//初始数组以及树状数组
int lowbit(int x){
return x&(-x);
}
int getsum(int x){//求1-x的区间和
int ans=0;
for(int i=x;i>0;i-=lowbit(i)){
ans+=tree[i];
}
return ans;
}
void add(int x,int y){//单点更新
for(int i=x;i<=n;i+=lowbit(i)){
tree[i]+=y;
}
}
int ask(int l,int r){//查询区间和
return getsum(r)-getsum(l-1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){//初始化树状数组
for(int j=i-lowbit(i)+1;j<=i;j++){
tree[i]+=a[j];
}
}
int command;
int x,y;//用于单点更新
int l,r;//用于区间查询
for(int i=0;i<m;i++){
cin>>command;
if(command==1){
cin>>x>>y;
add(x,y);
}else{
cin>>l>>r;
cout<<ask(l,r)<<endl;
}
}
return 0;
}
更多推荐



所有评论(0)