fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. vector <int> 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. int k;
  40. cin>>k;
  41. while(k--){
  42. int l,r;
  43. cin>>l>>r;
  44. cout<<get(0,0,n,l-1,r)<<'\n';
  45. }
  46. return 0;
  47. }
Success #stdin #stdout 0s 5296KB
stdin
5
4 4 8 7 8
2
1 2
1 3
stdout
0
0