HDU1166 敌兵布阵(树状数组)

来源:互联网 发布:linux 电池 编辑:程序博客网 时间:2024/05/29 03:14
<pre name="code" class="cpp">/*树状数组太屌了,看了一天才模模糊糊看懂了这个题解然后自己敲了一遍,算是记住这个模板了附上原题解网址:http://gzhu-101majia.iteye.com/blog/1142115*/#include <cstdio>#include <cstring>using namespace std;int n,a[50000+5];char str[10];int lowbit(int i)//此处琢磨了许久,必须画图才能理解{    return i&(-i);}void update(int i,int val){    while(i<=n)    {        a[i]+=val;        i+=lowbit(i);    }}int sum(int i){    int s=0;    while(i>0)    {        s+=a[i];        i-=lowbit(i);    }    return s;}int main(){    int t,val,cas=1,x,y;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        memset(a,0,sizeof(a));        for(int i=1;i<=n;i++)        {            scanf("%d",&val);            update(i,val);        }        printf("Case %d:\n",cas++);        while(~scanf("%s",str))        {            if(str[0]=='E')                break;            scanf("%d%d",&x,&y);            if(str[0]=='A')                update(x,y);            else if(str[0]=='S')                update(x,-y);            else                printf("%d\n",sum(y)-sum(x-1));        }    }    return 0;}


                                             
0 0
原创粉丝点击