Advertisement
vlatkovski

simple segment tree

Jan 13th, 2019
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/tree_policy.hpp>
  3. #include <ext/pb_ds/assoc_container.hpp>
  4. using namespace std;
  5. //using namespace __gnu_pbds;
  6. typedef long long ll;
  7. typedef pair<int, int> pi;
  8. typedef vector<int> vi;
  9. template <class Key, class Compare = less<Key>>
  10. using Tree = __gnu_pbds::tree<Key, __gnu_pbds::null_type, Compare, __gnu_pbds::rb_tree_tag, __gnu_pbds::tree_order_statistics_node_update>;
  11.  
  12.  
  13.  
  14.  
  15.  
  16. int m, n; // n is smallest power of 2 bigger than m
  17. vector<int> tree;
  18.  
  19. int sum(int a, int b, int k, int x, int y) {
  20.   if (x > b || y < a) return 0;
  21.   if (a <= x && y <= b) return tree[k];
  22.   int d = (x + y) / 2;
  23.   return sum(a, b, 2*k, x, d) + sum(a, b, 2*k+1, d+1, y);
  24. }
  25.  
  26. void add(int k, int x) {
  27.   k += n;
  28.   tree[k] += x;
  29.   for (k /= 2; k >= 1; k /= 2) {
  30.     tree[k] = tree[2*k] + tree[2*k+1];
  31.   }
  32. }
  33.  
  34. void Main() {
  35.   cin >> m;
  36.   n = 1; while (n < m) n <<= 1;
  37.   tree.resize(2*n+1, 0);
  38.   for (int i = 0; i < m; ++i) {
  39.     int x;
  40.     cin >> x;
  41.     add(i, x);
  42.   }
  43. //  for (int i = 1; i < 2*n; ++i) {
  44. //    cout << setw(4) << i << ' ';
  45. //  }
  46. //  cout << '\n';
  47. //  for (int i = 1; i < 2*n; ++i) {
  48. //    cout << setw(4) << tree[i] << ' ';
  49. //  }
  50. //  cout << '\n';
  51.   while (true) {
  52.     int l, r;
  53.     cin >> l >> r;
  54.     int ans = sum(l, r, 1, 0, n-1);
  55.     cout << "sum[" << l << ", " << r << "] = " << ans << '\n';
  56.   }
  57. }
  58.  
  59.  
  60. int main() {
  61.   ios::sync_with_stdio(false);
  62. //  cin.tie(nullptr);
  63.   #ifdef _DEBUG
  64. //  freopen("in.txt", "r", stdin);
  65. //  freopen("out.txt", "w", stdout);
  66.   #endif
  67.   Main();
  68.   return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement