orazma

min_and_update.cpp

Mar 27th, 2026
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. int n, m, q;
  5. const int MAXN = 2e5 + 10;
  6. const int INF = 1e9 + 7;
  7.  
  8. int t[4 * MAXN], a[MAXN], add[4 * MAXN];
  9.  
  10. void build(int v, int tl, int tr){
  11.     if (tl > tr){
  12.         return;
  13.     }
  14.     if (tl == tr){
  15.         t[v] = a[tl];
  16.         return;
  17.     }
  18.  
  19.     int tm = (tl + tr) / 2;
  20.     build(v + v, tl, tm);
  21.     build(v + v + 1, tm + 1, tr);
  22.     t[v] = min(t[v + v], t[v + v + 1]);
  23. }
  24.  
  25. void push(int v){
  26.     if (add[v] != 0){
  27.         t[v + v] += add[v];
  28.         t[v + v + 1] += add[v];
  29.         add[v + v] += add[v];
  30.         add[v + v + 1] += add[v];
  31.         add[v] = 0;
  32.     }
  33. }
  34.  
  35. int get_min(int v, int tl, int tr, int l, int r){
  36.     if (l > r){
  37.         return INF;
  38.     }
  39.     if (l == tl && r == tr){
  40.         return t[v];
  41.     }
  42.     int tm = (tl + tr) / 2;
  43.     push(v);
  44.     return min(get_min(v + v, tl, tm, l, min(r, tm)),
  45.                get_min(v + v + 1, tm + 1, tr, max(l, tm + 1), r));
  46. }
  47.  
  48. void update(int v, int tl, int tr, int l, int r, int val){
  49.     if (l > r){
  50.         return;
  51.     }
  52.     if (tl == l && tr == r){
  53.         t[v] += val;
  54.         add[v] += val;
  55.         return;
  56.     }
  57.     int tm = (tl + tr) / 2;
  58.     push(v);
  59.     update(v + v, tl, tm, l, min(r, tm), val);
  60.     update(v + v + 1, tm + 1, tr, max(l, tm + 1), r, val);
  61.     t[v] = min(t[v + v], t[v + v + 1]);
  62. }
  63.  
  64. int main() {
  65.  
  66.     //freopen("sum.in", "r", stdin);
  67.     //freopen("sum.out", "w", stdout);
  68.  
  69.     int n;
  70.     cin >> n;
  71.     for (int i = 1; i <= n; i++){
  72.         cin >> a[i];
  73.     }
  74.  
  75.     build(1, 1, n);
  76.     int q;
  77.     cin >> q;
  78.     while(q--){
  79.  
  80.         int l, r;
  81.         cin >> l >> r;
  82.         update(1, 1, n, l, r, 1);
  83.  
  84.         for (int i = 1; i <= n; i++){
  85.             cout << get_min(1, 1, n, i, i) << ' ';
  86.         }
  87.         cout << endl;
  88.     }
  89.  
  90. }
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment