fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. vector <long long> tree;
  5. long long merge (long long a , long long b){
  6. return a+b;
  7. }
  8. void build (int a[], int v, int l, int r){
  9. if(r-l==1){
  10. tree[v]=a[l];
  11. return;
  12. }
  13. int m=(l+r)/2;
  14. build (a,2*v+1, l , m);
  15. build (a,2*v+2, m , r);
  16. tree[v]=merge (tree[2*v+1],tree[2*v+2]);
  17. }
  18. long long get(int v, int l, int r, int ql,int qr){
  19. int E=0;
  20. if(ql<=l and qr>=r){
  21. return tree[v];
  22. }
  23. if (r<=ql or ql<=l){
  24. return E;
  25. }
  26. int m=(l+r)/2;
  27. return merge ( get(2*v+1, l , m , ql, qr),
  28. get(2*v+2, m , r, ql, qr));
  29. }
  30. int main() {
  31. int n;
  32. cin>>n;
  33. int a[n];
  34. for(int i=0; i<n; i++){
  35. cin>>a[i];
  36. }
  37. tree.resize(4*n);
  38. build(a,0,0,n);
  39. cout<<tree[0]<<endl;
  40. int k;
  41. cin>>k;
  42. while(k--){
  43. int l,r;
  44. cin>>l>>r;
  45. cout<<get(0,0,n,l-1,r)<<'\n';
  46. }
  47. return 0;
  48. }
Success #stdin #stdout 0s 5288KB
stdin
5
4 4 8 7 8
2
1 2
1 3
stdout
31
0
0