标签:
/* 树状数组前缀和 虽然只资词单点修改 区间查询 但是好写 pos&(-pos) 很神奇的东西 求前缀和 负数的二进制表示用补码(对应整数的反码+1) */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int tree[100010],n,m; void Add(int pos,int data) { while(pos<=n) { tree[pos]+=data; pos+=pos&(-pos); } } int find(int pos) { int sum=0; while(pos) { sum=sum+tree[pos]; pos-=pos&(-pos); } return sum; } int main() { cin>>n; int i,x,y,z; for(i=1;i<=n;i++) { cin>>x; Add(i,x); } cin>>m; for(i=1;i<=m;i++) { cin>>x>>y>>z; if(x==1)Add(y,z); else cout<<find(z)-find(y-1)<<endl; } return 0; }
标签:
原文地址:http://www.cnblogs.com/yanlifneg/p/5463535.html