HDU 1166 敌兵布阵

#include<stdio.h>
int N;
const int MAX=50010;
int numbers[MAX];
char s[7];
struct line
{
    int left;
    int right;
    int maxNum;
};
line lines[MAX<<2];
void buildTree(int le,int ri,int root)
{
    lines[root].left=le;
    lines[root].right=ri;
    if(le==ri)
    {
        lines[root].maxNum=numbers[le];
        return ;
    }
    int mid=(le+ri)>>1;
    buildTree(le,mid,root<<1);
    buildTree(mid+1,ri,(root<<1)+1);
    lines[root].maxNum=lines[root<<1].maxNum+lines[(root<<1)+1].maxNum;
}
int query(int le,int ri,int root)
{
    if(lines[root].left==le&&lines[root].right==ri)
    {
        return lines[root].maxNum;
    }
    int mid=(lines[root].left+lines[root].right)>>1;
    if(ri<=mid)
    {
        return query(le,ri,root<<1);
    }else
    if(mid+1<=le)
    {
        return query(le,ri,(root<<1)+1);
    }else
    {
        return query(le,mid,root<<1)+query(mid+1,ri,(root<<1)+1);
    }
}
void modify(int id,int root,int data)
{
    if(lines[root].left==id&&lines[root].right==id)
    {
        lines[root].maxNum+=data;
        return ;
    }
    int mid=(lines[root].left+lines[root].right)>>1;
    if(id<=mid)
    {
        modify(id,root<<1,data);
    }else
    {
        modify(id,(root<<1)+1,data);
    }
    lines[root].maxNum=lines[root<<1].maxNum+lines[root*2+1].maxNum;
}
int main()
{
    int cases=0;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        cases++;
        scanf("%d",&N);
        int i;
        for(i=1;i<=N;i++)
        {
            scanf("%d",&numbers[i]);
        }
        buildTree(1,N,1);
        printf("Case %d:\n",cases);
        while(scanf("%s",s))
        {

            if(s[0]=='E')
            {
                break;
            }
            int a,b;
            scanf("%d%d",&a,&b);

            if(s[0]=='A')
            {
                modify(a,1,b);
                continue;
            }
            if(s[0]=='S')
            {
                modify(a,1,-b);
                continue;
            }
            else
            printf("%d\n",query(a,b,1));
        }
    }
    return 0;

}

posted on 2011-06-01 20:10  lonelycatcher  阅读(235)  评论(0编辑  收藏  举报

导航