记录编号 397256 评测结果 AAAAAAAAAA
题目名称 求和问题 最终得分 100
用户昵称 Gravatarzeppoe 是否通过 通过
代码语言 C++ 运行时间 0.779 s
提交时间 2017-04-19 21:25:25 内存使用 0.62 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#define lc(x) x<<1//x*2
#define rc(x) x<<1|1//x*2+1
#define ll long long
#define maxn 10000

using namespace std;
ll n,m,x,y;
ll tree[maxn*4+1];

void maketree(ll x,ll begin,ll end){
	if(begin==end){
		scanf("%lld",&tree[x]);
		return;
	}
	int mid=(begin+end)>>1;// x/2
	maketree(lc(x),begin,mid);
	maketree(rc(x),mid+1,end);
	tree[x]=tree[lc(x)]+tree[rc(x)];
}
ll query(ll x,ll begin,ll end,ll left,ll right){
	if(left<=begin&&right>=end) return tree[x];
	ll mid=(begin+end)>>1;
	ll ansx=0;
	if(left<=mid) ansx+=query(lc(x),begin,mid,left,right);
	if(mid<right) ansx+=query(rc(x),mid+1,end,left,right);
	return ansx;
}
int main(){
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	scanf("%lld",&n);
	maketree(1,1,n);
	scanf("%lld",&m);
	for(int i=1;i<=m;i++){
		scanf("%lld%lld",&x,&y);
		ll ans=query(1,1,n,x,y);
		printf("%lld\n",ans);
	}
	return 0;
}