hdu-1166 敌兵布阵 树状数组

来源:互联网 发布:刘知白山水画 编辑:程序博客网 时间:2024/06/16 11:11

不多说,去年就做过的题,复习线段树顺手用树状数组搞一发

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <algorithm>#define maxn 55000using namespace std;int a[maxn],n;int bit(int k){return k&(-k);//二进制 }int sum(int k){int ans=0;while(k>0){ans+=a[k];k-=bit(k);}return ans;//计算区间和 }void up(int x,int k){while(x<=n){a[x]+=k;x+=bit(x);}}int main(){int t;int p,q;char s[1001];scanf("%d",&t);for(int k=1;k<=t;k++){scanf("%d",&n);memset(a,0,sizeof(a));for(int i=1;i<=n;i++){scanf("%d",&p);up(i,p);}printf("Case %d:\n",k);while(scanf("%s",&s)!=EOF){if(s[0]=='E'){break;}if(s[0]=='Q'){scanf("%d%d",&p,&q);printf("%d\n",sum(q)-sum(p-1));  //cout<<sum(q)<<" "<<sum(p-1)<<endl;}if(s[0]=='A'){scanf("%d%d",&p,&q);up(p,q);}if(s[0]=='S'){scanf("%d%d",&p,&q);up(p,-q);}}}return 0;}


0 0