记录编号 397256 评测结果 AAAAAAAAAA
题目名称 求和问题 最终得分 100
用户昵称 Gravatarzeppoe 是否通过 通过
代码语言 C++ 运行时间 0.779 s
提交时间 2017-04-19 21:25:25 内存使用 0.62 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #define lc(x) x<<1//x*2
  4. #define rc(x) x<<1|1//x*2+1
  5. #define ll long long
  6. #define maxn 10000
  7.  
  8. using namespace std;
  9. ll n,m,x,y;
  10. ll tree[maxn*4+1];
  11.  
  12. void maketree(ll x,ll begin,ll end){
  13. if(begin==end){
  14. scanf("%lld",&tree[x]);
  15. return;
  16. }
  17. int mid=(begin+end)>>1;// x/2
  18. maketree(lc(x),begin,mid);
  19. maketree(rc(x),mid+1,end);
  20. tree[x]=tree[lc(x)]+tree[rc(x)];
  21. }
  22. ll query(ll x,ll begin,ll end,ll left,ll right){
  23. if(left<=begin&&right>=end) return tree[x];
  24. ll mid=(begin+end)>>1;
  25. ll ansx=0;
  26. if(left<=mid) ansx+=query(lc(x),begin,mid,left,right);
  27. if(mid<right) ansx+=query(rc(x),mid+1,end,left,right);
  28. return ansx;
  29. }
  30. int main(){
  31. freopen("sum.in","r",stdin);
  32. freopen("sum.out","w",stdout);
  33. scanf("%lld",&n);
  34. maketree(1,1,n);
  35. scanf("%lld",&m);
  36. for(int i=1;i<=m;i++){
  37. scanf("%lld%lld",&x,&y);
  38. ll ans=query(1,1,n,x,y);
  39. printf("%lld\n",ans);
  40. }
  41. return 0;
  42. }