首页 > 代码库 > HDU 1166(树状数组)
HDU 1166(树状数组)
用树状数组把HDU1166再写了一次 感觉树状数组简洁
1 #include <cstdio> 2 #include <iostream> 3 #include <string.h> 4 using namespace std; 5 int c[50002],lv[50002],n; 6 int lowbit(int x){return x&(-x);} 7 int sum(int b){ 8 int sum=0; 9 while(b>0){10 sum+=c[b];11 b-=lowbit(b);12 }13 return sum;14 }15 void add(int x,int val){16 while(x<=n){17 c[x]+=val;18 x+=lowbit(x);19 }20 }21 void init(){22 for(int i=1;i<=n;i++){23 add(i,lv[i]);24 }25 }26 int main(){27 int t,a,b;28 scanf("%d",&t);29 for(int i=1;i<=t;i++){30 scanf("%d",&n);31 // memset(lv,0,sizeof(lv));32 // memset(c,0,sizeof(c));33 for(int j=1;j<=n;j++){34 scanf("%d",&lv[j]);35 c[j]=0;36 }37 init();38 char s[8];39 printf("Case %d:\n",i);40 while(scanf("%s",s)){41 if(s[0]==‘E‘)break;42 scanf("%d%d",&a,&b);43 switch (s[0]){44 case ‘A‘:add(a,b);break;45 case ‘S‘:add(a,-b);break;46 case ‘Q‘:printf("%d\n",sum(b)-sum(a-1));47 }48 }49 }50 return 0;51 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。