HDU 1166 一维树状数组

来源:互联网 发布:集搜客网页抓取软件 编辑:程序博客网 时间:2024/06/10 06:40

题目链接

单点修改,区间查询和。

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<queue>#include<vector>using namespace std;
#define Maxn 50005int v[Maxn],n;int Lowbit(int x){    return x&(-x);}void Add(int pos,int val){    while(pos<=Maxn){        v[pos]+=val;        pos+=Lowbit(pos);    }}int Sum(int End){    int sum=0;    while(End>0){        sum+=v[End];        End-=Lowbit(End);    }    return sum;}int main(){    //freopen("F:\\11.txt","r",stdin);    int T;    int Case=0;    scanf("%d",&T);    while(T--){        memset(v,0,sizeof(v));        int a,b;        scanf("%d",&n);        for(int i=1;i<=n;i++){            scanf("%d",&a);            Add(i,a);        }        char s[20];        printf("Case %d:\n",++Case);        while(cin>>s&&s[0]!='E'){            scanf("%d%d",&a,&b);            if(s[0]=='A'){                Add(a,b);            }            else if(s[0]=='S'){                Add(a,-b);            }            else if(s[0]=='Q'){                printf("%d\n",Sum(b)-Sum(a-1));            }        }    }    return 0;}


0 0
原创粉丝点击