Advertisement
playerr17

Untitled

Feb 23rd, 2023 (edited)
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. void build(int ind, int l, int r) {
  2.     if (l == r) {
  3.         t[ind] = arr[l];
  4.         return;
  5.     }
  6.     int d = (l + r) / 2;
  7.     build(ind * 2, l, d);
  8.     build(ind * 2 + 1, d + 1, r);
  9.     t[ind] = max(t[ind * 2], t[ind * 2 + 1]);
  10. }
  11.  
  12. void push(int ind) {
  13.     if (p[ind] != 0) {
  14.         t[ind * 2] += p[ind];
  15.         t[ind * 2 + 1] += p[ind];
  16.         p[ind * 2] += p[ind];
  17.         p[ind * 2 + 1] += p[ind];
  18.     }
  19.     p[ind] = 0;
  20. }
  21.  
  22. void update(int ind, int l, int r, int i, int j, ll val) {
  23.     if (l == i && r == j) {
  24.         t[ind] += val;
  25.         p[ind] += val;
  26.         return;
  27.     }
  28.     push(ind);
  29.     int d = (l + r) / 2;
  30.     if (j <= d) {
  31.         update(ind * 2, l, d, i, j, val);
  32.     } else if (d + 1 <= i) {
  33.         update(ind * 2 + 1, d + 1, r, i, j, val);
  34.     } else {
  35.         update(ind * 2, l, d, i, d, val);
  36.         update(ind * 2 + 1, d + 1, r, d + 1, j, val);
  37.     }
  38.     t[ind] = max(t[ind * 2], t[ind * 2 + 1]);
  39. }
  40.  
  41. ll get_max(int ind, int l, int r, int i, int j) {
  42.     if (l == i && r == j) {
  43.         return t[ind];
  44.     }
  45.     push(ind);
  46.     int d = (l + r) / 2;
  47.     if (j <= d) {
  48.         return get_max(ind * 2, l, d, i, j);
  49.     } else if (d + 1 <= i) {
  50.         return get_max(ind * 2 + 1, d + 1, r, i, j);
  51.     } else {
  52.         return max(get_max(ind * 2, l, d, i, d),
  53.                    get_max(ind * 2 + 1, d + 1, r, d + 1, j));
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement