orazma

max.cpp

Apr 2nd, 2026
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define f first
  4. #define s second
  5. using ll = long long;
  6. const int MOD = 998244353;
  7. const int MAXN = 2e5 + 10;
  8.  
  9. int t[4 * MAXN], add[4 * MAXN];
  10.  
  11. void build(int v, int tl, int tr){
  12.     if (tl > tr){
  13.         return;
  14.     }
  15.     if (tl == tr){
  16.         t[v] = a[tl];
  17.         return;
  18.     }
  19.     int tm = (tl + tr) / 2;
  20.     build(v + v, tl, tm);
  21.     build(v + v + 1, tm + 1, tr);
  22.     t[v] = max(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_max(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.  
  43.     push(v);
  44.     int tm = (tl + tr) / 2;
  45.     return max(get_max(v + v, tl, tm, l, min(r, tm)),
  46.                get_max(v + v + 1, tm + 1, tr, max(l, tm + 1), r));
  47. }
  48.  
  49. void update(int v, int tl, int tr, int pos, int val){
  50.     if (tl > tr){
  51.         return;
  52.     }
  53.  
  54.     if (tl == tr){
  55.         t[v] = val;
  56.         return;
  57.     }
  58.  
  59.     push(v);
  60.     int tm = (tl + tr) / 2;
  61.  
  62.     if (pos <= tm){
  63.         update(v + v, tl, tm, pos, val);
  64.     }
  65.     else{
  66.         update(v + v + 1, tm + 1, tr, pos, val);
  67.     }
  68.     t[v] = max(t[v + v], t[v + v + 1]);
  69. }
  70.  
  71. void update2(int v, int tl, int tr, int l, int r, int val){
  72.     if (l > r)
  73.         return;
  74.     if (tl == l && tr == r){
  75.         t[v] += val;
  76.         add[v] += val;
  77.         return;
  78.     }
  79.     push(v);
  80.     int tm = (tl + tr) / 2;
  81.  
  82.     update(v + v, tl, tm, l, min(r, tm));
  83.     update(v + v + 1, tm + 1, tr, max(l, tm + 1), r);
  84.  
  85.     t[v] = max(t[v + v], t[v + v + 1]);
  86. }
  87.  
  88. void solve() {
  89.  
  90.     int n, q;
  91.     cin >> n >> q;
  92.     for (int i = 1; i <= n; i++){
  93.         cin >> a[i];
  94.     }
  95.  
  96.     build(1, 1, n);
  97.     while(q--){
  98.         int l, r;
  99.         cin >> l >> r;
  100.         cout << get_max(1, 1, n, l, r) << "\n";
  101.     }
  102.  
  103. }
  104.  
  105. int main(){
  106.     std::ios::sync_with_stdio(false);
  107.     std::cin.tie(nullptr); std::cout.tie(nullptr);
  108.     int t = 1;
  109.     //cin >> t;
  110.     while (t--) {
  111.         solve();
  112.     }
  113. }
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
Advertisement
Add Comment
Please, Sign In to add comment