ProgMe

Untitled

Jan 5th, 2024
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int int64_t
  3.  
  4. using namespace std;
  5.  
  6. int n = 100000;
  7.  
  8. vector<int> a;
  9. vector<int> t_min, t_max;
  10.  
  11. void build(int v = 1, int tl = 0, int tr = n - 1) {
  12.     if (tl == tr) {
  13.         t_min[v] = t_max[v] = a[tl];
  14.         return;
  15.     }
  16.  
  17.     int tm = (tl + tr) / 2;
  18.  
  19.     build(v * 2, tl, tm);
  20.     build(v * 2 + 1, tm + 1, tr);
  21.  
  22.     t_min[v] = min(t_min[v * 2], t_min[v * 2 + 1]);
  23.     t_max[v] = max(t_max[v * 2], t_max[v * 2 + 1]);
  24. }
  25.  
  26. void update(int i, int x, int v = 1, int tl = 0, int tr = n - 1) {
  27.     if (tl == tr) {
  28.         a[tl] = x;
  29.         t_min[v] = t_max[v] = a[tl];
  30.         return;
  31.     }
  32.  
  33.     int tm = (tl + tr) / 2;
  34.  
  35.     if (i <= tm) {
  36.         update(i, x, v * 2, tl, tm);
  37.     } else {
  38.         update(i, x, v * 2 + 1, tm + 1, tr);
  39.     }
  40.  
  41.     t_min[v] = min(t_min[v * 2], t_min[v * 2 + 1]);
  42.     t_max[v] = max(t_max[v * 2], t_max[v * 2 + 1]);
  43. }
  44.  
  45. pair<int, int> get(int l, int r, int v = 1, int tl = 0, int tr = n - 1) {
  46.     if (l > r) {
  47.         return {numeric_limits<int>::max(), numeric_limits<int>::min()};
  48.     }
  49.     if (l == tl && r == tr) {
  50.         return {t_min[v], t_max[v]};
  51.     }
  52.  
  53.     int tm = (tl + tr) / 2;
  54.  
  55.     pair<int, int> ans_l = get(l, min(r, tm), v * 2, tl, tm);
  56.     pair<int, int> ans_r = get(max(l, tm + 1), r, v * 2 + 1, tm + 1, tr);
  57.  
  58.     return {min(ans_l.first, ans_r.first), max(ans_l.second, ans_r.second)};
  59. }
  60.  
  61. int32_t main() {
  62.     ios::sync_with_stdio(false);
  63.     cin.tie(nullptr);
  64.    
  65.     a.resize(n);
  66.     t_min.resize(4 * n);
  67.     t_max.resize(4 * n);
  68.  
  69.     for (int i = 1; i <= n; i++) {
  70.         a[i - 1] = i * i % 12345 + i * i * i % 23456;
  71.     }
  72.     build();
  73.  
  74.     int q;
  75.     cin >> q;
  76.     while (q--) {
  77.  
  78.         int i;
  79.         cin >> i;
  80.  
  81.         if (i < 0) {
  82.             int x;
  83.             cin >> x;
  84.             i = abs(i) - 1;
  85.  
  86.             update(i, x);
  87.         } else {
  88.             int l = i, r;
  89.             cin >> r;
  90.             l--, r--;
  91.  
  92.             pair<int, int> ans = get(l, r);
  93.  
  94.             cout << ans.second - ans.first << '\n';
  95.         }
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment