HDUOJ 1166 敌兵布阵
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDUOJ 1166 敌兵布阵相关的知识,希望对你有一定的参考价值。
发现自己之前对线段树 树状数组这种数据结构只会套套模板,根本就没有理解与运用。
所以打算最近开始重新学习这些数据结构。
那么这就是我的树状数组第一道练习题目:敌兵布阵
差不多就是模板题目
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 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 }
以上是关于HDUOJ 1166 敌兵布阵的主要内容,如果未能解决你的问题,请参考以下文章