树状数组1——树状数组区间求和、单点更新模板
题意:
已知一个数列,你需要进行下面两种操作:
1.将某一个数加上x
2.求出某区间每一个数的和
题解:
树状数组求区间求和和单点更新的模板
代码:
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int n,m; int c[maxn],a[maxn]; void updata(int pos,int x) { for(;pos<=n;pos+=pos&-pos)c[pos]+=x; } int query(int pos) { int ans=0; for(;pos;pos-=pos&-pos)ans+=c[pos]; return ans; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); updata(i,a[i]); } while(m--) { int op,x,y; scanf("%d%d%d",&op,&x,&y); if(op==1) { updata(x,y); } else { int ans=query(y)-query(x-1); printf("%d\n",ans); } } return 0; }