2014年1月28日 星期二

[UVA] 12086 - Potentiometers


#include<stdio.h>
#include<string.h>
long long int c[200005],num[200005],ans,k;
char s[10];
int main(){
    int n,x,y,i,j,C=0;
    while(scanf("%d",&n)!=EOF && n){
        memset(c,0,sizeof(c));
        if(C) puts("");
        printf("Case %d:\n",++C);
        for(i=1;i<=n;i++){
            scanf("%d",&x);
            num[i]=x;
            for(j=i;j<=n;j+=j&-j)
                c[j]+=x;
        }
        while(scanf("%s",s)){
            if(strcmp(s,"END")==0) break;
            if(s[0]=='M'){
                scanf("%d%d",&x,&y);
                ans=0;
                for(i=y;i>0;i-=i&-i)
                    ans+=c[i];
                if(x>1){
                    for(i=x-1;i>0;i-=i&-i)
                        ans-=c[i];
                }
                printf("%lld\n",ans);
            }
            else{
                scanf("%d%d",&x,&y);
                k=y-num[x];
                num[x]=y;
                for(i=x;i<=n;i+=i&-i)
                    c[i]+=k;
            }
        }
    }
}

沒有留言:

張貼留言