码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-04-30 22:19:48      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

  之前用过了线段树的做法,树状数组的也补上吧

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int c[50005],n;
int lowbit(int x)
{
    return x&(-x);
}
void add(int i,int x)
{
    while(i <= n)
    {
        c[i] += x;
        i += lowbit(i);
    }
}
int cal(int i)
{
    int sum = 0;
    while(i > 0)
    {
        sum += c[i];
        i -= lowbit(i);
    }
    return sum;
}
int main()
{
    int t;
    scanf("%d",&t);
    int tot = 0;
    while(t--)
    {
        printf("Case %d:\n",++tot);
        memset(c,0,sizeof(c));
        scanf("%d",&n);
        for(int i = 1;i <= n;i++)
        {
            int num;
            scanf("%d",&num);
            add(i,num);
        }
        char op[10];
        while(~scanf("%s",op))
        {
            int id,num;
            if(!strcmp(op,"End"))
                break;
            else if(!strcmp(op,"Add"))
            {
                scanf("%d%d",&id,&num);
                add(id,num);
            }
            else if(!strcmp(op,"Sub"))
            {
                scanf("%d%d",&id,&num);
                add(id,-num);
            }
            else
            {
                scanf("%d%d",&id,&num);
                printf("%d\n",cal(num) - cal(id-1));
            }
        }
    }
    return 0;
}

 

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

标签:

原文地址:http://www.cnblogs.com/jifahu/p/5449504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!