#include <iostream>
using namespace std;
const int maxn=1e5+5;
int c[maxn],a[maxn];
int n;
int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int ans=0;
while(x>0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void add(int x,int d)
{
while(x<=n)
{
c[x]+=d;
x+=lowbit(x);
}
}
int main()
{
while(cin>>n)
{
for(int i=1; i<=n; i++)
{
cin>>a[i];
add(i,a[i]);
}
int l,r;
while(cin>>l>>r)
cout<<sum(r)-sum(l-1)<<endl;
}
///cout << "Hello world!" << endl;
return 0;
}
二叉索引树,求前缀数组和,区间和
最新推荐文章于 2023-02-10 13:19:57 发布