版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuxiyulu/article/details/77618788
/*
树状数组求前缀和
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long LL;
const int maxn=5e4+5;
int n,q;
int pos,l;
LL bit[maxn];
LL sum(int i)
{
LL s=0;
while(i>0)
{
s+=bit[i];
i-=i&-i;
}
return s;
}
void add(int i,int x)
{
while(i<=n)
{
bit[i]+=x;
i+=i&-i;
}
}
int main()
{
while(~scanf("%d",&n))
{
int x;
memset(bit,0,sizeof(bit));
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(i,x);
}
scanf("%d",&q);
for(int i=0;i<q;i++)
{
scanf("%d%d",&pos,&l);
printf("%I64d\n",sum(pos+l-1)-sum(pos-1));
}
}
return 0;
}
/*
前缀和
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long LL;
const int maxn=5e4+5;
int n,q;
int pos,l;
LL sum[maxn];
int main()
{
while(~scanf("%d",&n))
{
int x;
sum[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
sum[i]=sum[i-1]+x;
}
scanf("%d",&q);
for(int i=0;i<q;i++)
{
scanf("%d%d",&pos,&l);
printf("%I64d\n",sum[pos+l-1]-sum[pos-1]);
}
}
return 0;
}