您的位置:首页 > 其它

hdu 1166

2015-07-07 22:11 218 查看
#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;
}


第一次自己写树状数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: