比赛 哈哈哈 评测结果 AAAAAAAWWW
题目名称 求和问题 最终得分 70
用户昵称 tat 运行时间 2.623 s
代码语言 C++ 内存使用 6.97 MiB
提交时间 2019-03-07 21:58:14
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int t[1000001]={0},a1,b1,sum;
void ask(int f,int to,long long s){
	if(b1<f||to<a1)return;
	//cout<<s<<' '<<a1<<' '<<b1;
	int mid=(f+to)/2;
	if(a1<=f&&to<=b1){
		sum+=t[s];
		//cout<<' '<<s<<' ';
		return;
	}
	else {
		ask(f,mid,2*s);
		ask(mid+1,to,s*2+1);
	}
	return;
}
int bt(int f,int to,long long s){
	if(f==to){
		cin>>t[s];
	//	cout<<s<<' '<<t[s]<<' '; 
		return t[s];
	}
	int mid=(f+to)/2;
	t[s]=bt(f,mid,2*s)+bt(mid+1,to,2*s+1);
	return t[s];
}
int main(int argc, char** argv) {
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
    int n,m;
    cin>>n;
    bt(1,n,1);
    //cout<<t[1];
    cin>>m;
    for(int i=1;i<=m;i++){
		sum=0;
    	cin>>a1>>b1;
    	ask(1,n,1); 
    	cout<<sum<<endl;
    }
}