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

来源:互联网 发布:网易我的世界网络错误 编辑:程序博客网 时间:2024/04/30 07:41

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

树状数组入门题就不解释了!

#include <string.h>#include <stdio.h>#include <iostream>#include <algorithm>using namespace std;#define maxn 60000int c[maxn];int n;char str[10];int lowbit(int pos){    return (-pos)&pos;}int add(int pos,int num){    while(pos<=n){        c[pos]+=num;        pos+=lowbit(pos);    }    return 0;}int sum(int pos){    int ans=0;    while(pos>0){        ans+=c[pos];        pos-=lowbit(pos);    }    return ans;}int main(){    int i,j,k,t,a,b,ca=0;    scanf("%d",&t);    while(t--){        memset(c,0,sizeof(c));        printf("Case %d:\n",++ca);        scanf("%d",&n);        for(i=1;i<=n;i++){            scanf("%d",&k);            add(i,k);        }        while(scanf("%s",str)){            if(str[0]=='Q'){                scanf("%d %d",&a,&b);                printf("%d\n",sum(b)-sum(a-1));            }            else if(str[0]=='A' || str[0]=='S'){                scanf("%d%d",&a,&b);                if(str[0]=='S') b=-b;                add(a,b);            }            else break;        }    }    return 0;}