记录编号 304184 评测结果 AAAAAAAATA
题目名称 求和问题 最终得分 90
用户昵称 Gravatar仰望星空 是否通过 未通过
代码语言 C++ 运行时间 6.284 s
提交时间 2016-09-07 20:01:00 内存使用 19.17 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #define ll long long
  4. using namespace std;
  5. ll a[100001];
  6.  
  7. struct tree
  8. {
  9. ll l,r,sum;
  10. }t[1000001];
  11.  
  12. void build(ll l,ll r,ll k)
  13. {
  14. t[k].l=l;
  15. t[k].r=r;
  16. if(l==r)
  17. {
  18. t[k].sum=a[l];
  19. return;
  20. }
  21. ll mid=(l+r)/2;
  22. build(l,mid,k*2);
  23. build(mid+1,r,k*2+1);
  24. t[k].sum=t[k*2].sum+t[k*2+1].sum;
  25. return;
  26. }
  27.  
  28. ll query(ll l,ll r,ll k)
  29. {
  30. if(t[k].l==l&&t[k].r==r)return t[k].sum;
  31. int mid=(t[k].l+t[k].r)/2;
  32. if(r<=mid)return query(l,r,k*2);
  33. if(l>mid)return query(l,r,k*2+1);
  34. return query(l,mid,k*2)+query(mid+1,r,k*2+1);
  35. }
  36.  
  37. int main()
  38. {
  39. freopen("sum.in","r",stdin);
  40. freopen("sum.out","w",stdout);
  41. ll n,m,i,j,k;
  42. cin>>n;
  43. for(i=1;i<=n;i++)
  44. {
  45. cin>>a[i];
  46. }
  47. build(1,n,1);
  48. cin>>m;
  49. for(i=1;i<=m;i++)
  50. {
  51. cin>>j>>k;
  52. cout<<query(j,k,1)<<endl;
  53. }
  54. return 0;
  55. }