Advertisement
999ms

Untitled

Jan 22nd, 2020
248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define all(x) (x).begin(),(x).end()
  3.  
  4. using namespace std;
  5. using ll = long long;
  6.  
  7. struct SegmentTree {
  8.     vector<int> t;
  9.     SegmentTree(int n) : t(n * 4) {}
  10.  
  11.     void Build(int v, int tl, int tr, vector<int>& arr) {
  12.         if (tl + 1 == tr) {
  13.             t[v] = arr[tl];
  14.         } else {
  15.             int tm = (tl + tr) / 2;
  16.             Build(v * 2 + 1, tl, tm, arr);
  17.             Build(v * 2 + 2, tm, tr, arr);
  18.             t[v] = max(t[v * 2 + 1], t[v * 2 + 2]);
  19.         }
  20.     }
  21.     void Update(int v, int tl, int tr, int index, int value) {
  22.         if (tl + 1 == tr) {
  23.             t[v] = value;
  24.         } else {
  25.             int tm = (tl + tr) / 2;
  26.             if (index < tm) {
  27.                 Update(v * 2 + 1, tl, tm, index, value);
  28.             } else {
  29.                 Update(v * 2 + 2, tm, tr, index, value);
  30.             }
  31.             t[v] = max(t[v * 2 + 1], t[v * 2 + 2]);
  32.         }
  33.     }
  34.     int LowerBound(int v, int tl, int tr, int x, int y) {
  35.         if (tr - 1 < x || t[v] < y) return -1;
  36.         if (tl + 1 == tr) {
  37.             return tl;
  38.         } else {
  39.             int tm = (tl + tr) / 2;
  40.             int ans = LowerBound(v * 2 + 1, tl, tm, x, y);
  41.             if (ans == -1) {
  42.                 ans = LowerBound(v * 2 + 2, tm, tr, x, y);
  43.             }
  44.             return ans;
  45.         }
  46.     }
  47.  
  48. };
  49.  
  50. int main() {
  51.     ios_base::sync_with_stdio(false);
  52.     cin.tie(nullptr);
  53.     cout.tie(nullptr);
  54.  
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement