比赛 线段数树状数组 评测结果 AAAAAAAAAA
题目名称 求和问题 最终得分 100
用户昵称 CloudTower 运行时间 4.992 s
代码语言 C++ 内存使用 4.13 MiB
提交时间 2018-06-17 14:07:44
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
long long n,m;
long long c[500005],a;
long long x,l,r,k,z;
long long lowbit(long long x)
{
	return x&(-x);
}
long long getsum(long long pos)
{
	long long res=0;
	while(pos>0)
	{
		res+=c[pos];
		pos-=lowbit(pos);
	}
	return res;
}
void add(long long pos,long long num)
{
	while(pos<=n)
	{
		c[pos]+=num;
		pos+=lowbit(pos);
	}
}
int main()
{
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	cin>>n;
	for(long long i=1;i<=n;i++)
	{
		cin>>a;add(i,a);
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>l>>r;cout<<getsum(r)-getsum(l-1)<<endl;
	}
	fclose(stdin);fclose(stdout);
	return 0;
}