题目描述
这就是一个简单的树状数组入门题
可以动态地进行区间和查询
随时可能会进行更新
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<string> #include<cstring> using namespace std; int C[100005]; int n,m; int lowbit(int x){ return x&(-x); } void add(int x,int d){ while(x<=n){ C[x]+=d; x+=lowbit(x); }//修改是从左往右 } int sum(int x){ int ret=0; while(x>0){ ret+=C[x]; x-=lowbit(x);//求和是从右往左 } return ret; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { int x; cin>>x; add(i,x); } for(int i=1;i<=m;i++){ int k,a,b; cin>>k>>a>>b; if(k==1) add(a,b); if(k==0) cout<<sum(b)-sum(a-1)<<endl; } return 0; }
如果对树状数组的一些基础知识还不太了解
可以先看一下https://www.cnblogs.com/Tidoblogs/p/10887644.html
原文地址:https://www.cnblogs.com/Tidoblogs/p/10887657.html
时间: 2024-11-09 04:11:09