您的位置:首页 > 其它

NYOJ 116士兵杀敌(二)(树状数组)(插点问线)

2013-07-18 11:38 323 查看
二叉索引数(树状数组)

[code] #include<cstdio>
#define Max 1000005
int C[Max];
int N,M;
int lowbit(int x)
{
return x & -x;
}
int sum(int i)//计算前i项和
{
int ret = 0;
while(i>0)
{
ret += C[i];
i -= lowbit(i);
}
return ret;
}
void add(int x,int n)//A[x]元素增加n,即C[x]的前x项和加n
{
while(x <= N)
{
C[x] += n;
x += lowbit(x);
}
}

int main()
{
   //freopen("in.txt","r",stdin);
int i,a,b;
char s[9];
scanf("%d%d",&N,&M);
for(i=1; i<=N; i++)
{
scanf("%d",&a);
add(i,a);
}
for(i=0; i<M; i++)
{
scanf("%s%d%d",s,&a,&b);
if(s[0] == 'A')
add(a,b);
else
printf("%d\n",sum(b)-sum(a-1));
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: