您的位置:首页 > 其它

hdu 1166 敌兵布阵(树状数组)

2015-08-17 15:33 351 查看
题意:区间和

思路:树状数组

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;

int n,c[50005];

int lowbit(int i){
return i&-i;
}

void update(int i,int val){//更新函数
while(i<=n){//注意这个n的变化,应该为最大值,具体题目自行变化。
c[i]+=val;
i+=lowbit(i);
}
}

int sum(int i){//求和函数
int sum=0;
while(i>0){
sum+=c[i];
i-=lowbit(i);
}
return sum;
}

int main(){
int t,a,b,i,j;
char str[10];
scanf("%d",&t);
for(i=1;i<=t;++i){
memset(c,0,sizeof(c));
printf("Case %d:\n",i);
scanf("%d",&n);
for(j=1;j<=n;++j){
scanf("%d",&b);
update(j,b);
}
while(~scanf("%s",str)&&str[0]!='E'){
scanf("%d%d",&a,&b);
if(str[0]=='A')update(a,b);
else if(str[0]=='S')update(a,-b);
else printf("%d\n",sum(b)-sum(a-1));
}
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: