hdu1166 敌兵布阵
Posted MAYDAY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1166 敌兵布阵相关的知识,希望对你有一定的参考价值。
似乎当初就是学到这里然后自己就去乱搞了?然后就弃坑了?想想挺难受的其实
树状数组板子题。初始化wa了一发
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<cmath> 7 #include<vector> 8 using namespace std; 9 #define mem(a,b) memset(a,b,sizeof(a)) 10 #define ll long long 11 #define inf 1000000000 12 #define maxn 40000 13 #define eps 1e-12 14 #define mod 1000000007 15 inline int read() 16 { 17 int x=0,f=1;char ch=getchar(); 18 while(ch<‘0‘||ch>‘9‘) {if(ch==‘-‘) f=-1;ch=getchar();} 19 while(ch>=‘0‘&&ch<=‘9‘) {x=10*x+ch-‘0‘;ch=getchar();} 20 return x*f; 21 } 22 int a[50005],n; 23 char s[20]; 24 int lowbit(int i) 25 { 26 return i&(-i); 27 } 28 void update(int i,int peo) 29 { 30 while(i<=n) 31 { 32 a[i]+=peo;i+=lowbit(i); 33 } 34 } 35 int sum(int i) 36 { 37 int sum=0; 38 while(i>0) 39 { 40 sum+=a[i]; 41 i-=lowbit(i); 42 } 43 return sum; 44 } 45 int main() 46 { 47 int T; 48 T=read(); 49 int num=1,peo; 50 while(T--) 51 { 52 n=read(); 53 mem(a,0); 54 for(int i=1;i<=n;++i) peo=read(),update(i,peo); 55 printf("Case %d:\n",num++); 56 while(scanf("%s",s)) 57 { 58 if(s[0]==‘E‘) break; 59 int x,y; 60 x=read();y=read(); 61 if(s[0]==‘Q‘) printf("%d\n",sum(y)-sum(x-1)); 62 else if(s[0]==‘A‘) update(x,y); 63 else update(x,-y); 64 } 65 } 66 return 0; 67 }
以上是关于hdu1166 敌兵布阵的主要内容,如果未能解决你的问题,请参考以下文章