#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define MAXN 10005
int c[MAXN];
int a[MAXN];
int n;
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int p)//对x位置增加p;
{
while(x<=n)
{
c[x]+=p;
x+=lowbit(x);
}
}
int getsum(int x)//1-x的和 ;
{
int res=0;
while(x)
{
res+=c[x];
x-=lowbit(x);
}
return res;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
{
add(i,a[i]);//构造树状数组
}
int l,r;
while(cin>>l>>r)
{
cout<<getsum(r)-getsum(l-1)<<endl;//输出区间l到r(闭区间)的和;
}
return 0;
}树状数组求区间和
最新推荐文章于 2023-02-24 15:09:43 发布
327

被折叠的 条评论
为什么被折叠?



