发现自己之前对线段树 树状数组这种数据结构只会套套模板,根本就没有理解与运用。
所以打算最近开始重新学习这些数据结构。那么这就是我的树状数组第一道练习题目:敌兵布阵差不多就是模板题目
1 #include2 #include 3 #include 4 int T; 5 int n,x,y; 6 int bit[50005]; 7 char que[2333]; 8 int lowbit(int x){ 9 return x & -x;10 }11 int sum(int x){12 int ans=0;13 for(int i=x;i;i-=lowbit(i)) ans+=bit[i];14 return ans;15 }16 void add(int x,int y){17 for(int i=x;i<=n;i+=lowbit(i)){18 bit[i]+=y;19 }20 }21 int main(){22 scanf("%d",&T);23 for(int f=1;f<=T;f++){24 memset(bit,0,sizeof(bit));25 scanf("%d",&n);26 for(int i=1;i<=n;i++){27 scanf("%d",&x);28 add(i,x);29 }30 printf("Case %d:\n",f);31 while( scanf("%s",que) != EOF){32 if(que[0]=='E') break;33 else if(que[0]=='A'){34 scanf("%d%d",&x,&y);35 add(x,y);36 }37 else if(que[0]=='S'){38 scanf("%d%d",&x,&y);39 add(x,-y);40 //printf("FUCK\n");41 }42 else if(que[0]=='Q'){43 scanf("%d%d",&x,&y);44 printf("%d\n",sum(y)-sum(x-1));45 }46 } 47 } 48 return 0;49 }