#include<cstdio>
#include<cstring>
#define lowbit(x) (x&(-x))
int num[10000];
int n;
void add(int x,int y) //把第x个数加y
{
for(int i=x;i<=n;i+=lowbit(i))
{
num[i]+=y;
}
}
int getsum(int x) //求从1到x的和
{
int sum = 0;
for(int i=x;i;i-=lowbit(i))
{
sum+=num[i];
}
return sum;
}
int main()
{
scanf ("%d",&n);
memset(num,0,sizeof(num));
for (int i = 1 ; i <= n ; i++)
{
int t;
scanf ("%d",&t);
add(i,t);
}
int m;
scanf ("%d",&m);
while (m--)
{
int x,y;
scanf ("%d %d",&x,&y);
printf ("%d\n",getsum(y)-getsum(x-1)); //求解某一段区间的和。
}
return 0;
}
©著作权归作者所有:来自51CTO博客作者qinXpeng的原创作品,如需转载,请注明出处,否则将追究法律责任
树状数组数据结构
共同学习,写下你的评论
评论加载中...
作者其他优质文章