Advertisement
DuongNhi99

Segment Tree - Min

Nov 22nd, 2021
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5. using pi32 = pair<int, int>;
  6.  
  7. const int maxN = 1e5 + 5;
  8. const int INF = 1e9 + 7;
  9. const int MOD = 998244353;
  10.  
  11. int n;
  12. int a[maxN];
  13.  
  14. void build(int id, int l, int r) {
  15.     if (l == r) {
  16.         t[id] = a[l];
  17.         return;
  18.     }
  19.  
  20.     int mid = (l + r) / 2;
  21.     build(id*2, l, mid);
  22.     build(id*2 + 1, mid + 1, r);
  23.     t[id] = min(t[id*2], t[id*2 + 1]);
  24. }
  25.  
  26. // Cập nhập: a[pos] = val
  27. void update(int id, int l, int r, int pos, int val) {
  28.     if (pos < l || r < pos) return;
  29.     if (l == r) {
  30.         t[id] = val;
  31.         return;
  32.     }
  33.  
  34.     int mid = (l + r) / 2;
  35.     update(id*2, l, mid, pos, val);
  36.     update(id*2 + 1, mid+1, r, pos, val);
  37.  
  38.     t[id] = min(t[id*2], t[id*2 + 1]);
  39. }
  40.  
  41. // Truy vấn: tìm min đoạn [u, v]
  42. int getMin(int id, int l, int r, int u, int v) {
  43.     if (v < l || r < u) return INF;
  44.     if (u <= l && r <= v) return t[id];
  45.  
  46.     int mid = (l + r) / 2;
  47.     return min(getMin(id*2, l, mid, u, v), getMin(id*2 + 1, mid+1, r, u, v));
  48. }
  49.  
  50. int main() {
  51. #ifdef LOCAL
  52.     freopen("in1.txt", "r", stdin);
  53. #else
  54.     freopen("Segment Tree - Min.inp", "r", stdin);
  55.     freopen("Segment Tree - Min.out", "w", stdout);
  56. #endif
  57.     ios_base::sync_with_stdio(false);
  58.     cin.tie(nullptr);
  59.  
  60.     cin >> n;
  61.     for (int i = 1; i <= n; ++i)
  62.         cin >> a[i];
  63.  
  64.     build(1, 1, n);
  65.  
  66.     return 0;
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement