HDU:1166

这应该算是树状数组模板题吧!

题目:HDU:1166.点击此处进入!


这道题目比较简单,题意也好懂,我这里只贴个板子,不懂评论!

#include
#include
#include
using namespace std;
const int N=52005;//树组大小要比题目给的稍大,防止运行错误。
int m;
string s;
int a[N],c[N];
int sum(int t){
    int y=0;
    while(t>0){
        y+=c[t];
        t-=(t&(-t));
    }
    return y;
}
void updata(int p,int q){
    while(p<=N){
        c[p]+=q;
        p+=(p&(-p));
    }
}
int main(){
    int aa;
    scanf("%d",&aa);
    for(int bb=1;bb<=aa;++bb){
        printf("Case %d:\n",bb);
        scanf("%d",&m);
        int x,y;
        memset(a,0,sizeof(a));
        memset(c,0,sizeof(c));
        for(int i=1;i<=m;++i){
            scanf("%d",&a[i]);
            updata(i,a[i]);
        }
        int flag=1;
        while(flag){
            cin>>s;//因为首字母不同,所以直接判断首字母更简洁!
            if(s[0]!='E')scanf("%d%d",&x,&y);
            if(s[0]=='A')updata(x,y);
            if(s[0]=='S')updata(x,-y);
            if(s[0]=='Q')printf("%d\n",sum(y)-sum(x-1));
            if(s[0]=='E') flag=0;
        }
    }
    return 0;
}

 

再说一遍:有问题评论,别骂博主SB,谢谢!

你可能感兴趣的:(HDU:1166)