HDU_1166_敌兵布阵
超级无敌裸的树状数组
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<queue> using namespace std; int c[50005],n; int lowbit(int x) { return x&(-x); } int sum(int x) { int ret=0; while(x>0) { ret+=c[x];x-=lowbit(x); } return ret; } void add(int x,int d) { while(x<=n) { c[x]+=d; x+=lowbit(x); } } int main() { int t,a,L,R,i,j,k; scanf("%d",&t); for(k=1;k<=t;++k) { scanf("%d",&n); for(i=0;i<=n;++i) c[i]=0; for(i=1;i<=n;++i) { scanf("%d",&a); add(i,a); } string b; printf("Case %d:\n",k); while(cin>>b&&b!="End") { scanf("%d%d",&L,&R); if(b=="Query") { printf("%d\n",sum(R)-sum(L-1)); } else if(b=="Add") add(L,R); else add(L,-R); } } return 0; }