STL做法 平衡树
#include<cstdio> #include<cstring> #include<iostream> using namespace std; #define M (250000) #define maxn (1000000+5) int N,n,m; int st[4*maxn]; void change(int x,int v){ x+=M; for(st[x]+=v;x>1;x>>=1){ st[x>>1]=st[x]+st[x^1]; } } int ask(int L,int R) { int ans=0; for(L+=M-1,R+=M+1;L!=(R^1);L>>=1,R>>=1) { if(~L&1)ans+=st[L^1]; if( R&1)ans+=st[R^1]; } return ans; } int main() { scanf("%d",&N); for(int i=1;i<=N;i++) { int temp; scanf("%d",&temp); change(i,temp); } scanf("%d",&m); for(int i=1;i<=m;i++) { int x,a,b; scanf("%d%d%d",&x,&a,&b); if(x==1) { change(a,b); } else printf("%d\n",ask(a,b)); } return 0; }