关闭

hdu 1166

217人阅读 评论(0) 收藏 举报
分类:

#include <stdio.h>
#include <string.h>
#define maxn 500005
int p[maxn], c[maxn], n;
char ask[15];
int lowbit(int x)
{
	return x & (-x);
}

void update(int x, int num)
{
	while(x <= n)
	{
		c[x] += num;
		x += lowbit(x);
	}
}

int getSum(int x)
{
	int s = 0;
	while(x > 0)
	{
		s += c[x];
		x -= lowbit(x);
	}
	return s;
}
int main()
{
	int t, i, k, x, y;
	scanf("%d", &t);
	k = 1;
	while(t--)
	{
		printf("Case %d:\n", k++);
		scanf("%d", &n);
		memset(c, 0, sizeof(c));
		for(i = 1;i <= n;i++)
		{
			scanf("%d", &p[i]);
			update(i, p[i]);
		}
		
		while(1)
		{
			scanf("%s", ask);
			if(!strcmp(ask, "Add"))
			{
				scanf("%d %d", &x, &y);
				update(x, y);
			}
			else if(!strcmp(ask, "Sub"))
			{
				scanf("%d %d", &x, &y);
				update(x, -y);
			}
			else if(!strcmp(ask, "Query"))
			{
				scanf("%d %d", &x, &y);
				printf("%d\n", getSum(y) - getSum(x - 1));
			}
			else if(!strcmp(ask, "End")) break;
		}
	}
	return 0;
}
 

第一次自己写树状数组


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34296次
    • 积分:1818
    • 等级:
    • 排名:千里之外
    • 原创:153篇
    • 转载:3篇
    • 译文:0篇
    • 评论:2条
    最新评论