tien_noob

Segment Tree

Apr 30th, 2021 (edited)
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <numeric>
  4. #include <set>
  5. #include <queue>
  6. #include <stack>
  7. #include <vector>
  8. #include <climits>
  9. #include <string>
  10. #include <cstdio>
  11. #include <cmath>
  12. #define task "TESTCODE"
  13. using namespace std;
  14. const int N = 1e5;
  15. int n, Tree[4 * N + 1], a[N+1];
  16. void read()
  17. {
  18.    cin >> n;
  19.    for (int i = 1; i <= n; ++ i)
  20.    {
  21.        cin >> a[i];
  22.    }
  23. }
  24. void BuildTree(int v, int l, int r)
  25. {
  26.     if (l == r)
  27.     {
  28.         Tree[v] = a[l];
  29.     }
  30.     else
  31.     {
  32.         int mid = (l + r)/2;
  33.         BuildTree(v * 2, l, mid);
  34.         BuildTree(v * 2 + 1, mid + 1, r);
  35.         Tree[v] = Tree[2 * v] + Tree[2 * v + 1];
  36.     }
  37. }
  38. void Update(int v, int TreeL, int TreeR, int pos, int new_val)
  39. {
  40.     if (TreeL == TreeR)
  41.     {
  42.         Tree[v] = new_val;
  43.     }
  44.     else
  45.     {
  46.         int mid = (TreeL + TreeR)/2;
  47.         if (pos <= mid)
  48.         {
  49.             Update(v * 2, TreeL, mid, pos, new_val);
  50.         }
  51.         else
  52.         {
  53.             Update(v * 2 + 1, mid + 1, TreeR, pos, new_val);
  54.         }
  55.         Tree[v] = Tree[2 * v] + Tree[2 * v + 1];
  56.     }
  57. }
  58. int Sum(int v, int TreeL, int TreeR, int l, int r)
  59. {
  60.     if (l > r)
  61.     {
  62.         return 0;
  63.     }
  64.     if (l == TreeL && r == TreeR)
  65.     {
  66.         return Tree[v];
  67.     }
  68.     int mid = (TreeL + TreeR)/2;
  69.     return Sum(v * 2, TreeL, mid, l, min(r, mid)) + Sum(v * 2 + 1, mid + 1, TreeR, max(l, mid + 1), r);
  70. }
  71. void solve()
  72. {
  73.    BuildTree(1, 1, n);
  74.    cout << Sum(1, 1, n, 1, 7) << '\n';
  75.    Update(1, 1, n, 5, 69);
  76.    cout << Sum(1,1,n,1,7);
  77. }
  78. int main()
  79. {
  80.    ios_base::sync_with_stdio(false);
  81.    cin.tie(nullptr);
  82.    freopen(task".INP", "r", stdin);
  83.    //freopen(task".OUT", "w", stdout);
  84.    read();
  85.    solve();
  86. }
  87.  
Add Comment
Please, Sign In to add comment