DuongNhi99

QMAX

Mar 10th, 2022
630
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. //QMAX
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. const int INF = 1e9 + 7;
  6. const int N = 1e6 + 5;
  7.  
  8. int n, m, p, a[N];
  9. long long stMax[4 * N];
  10.  
  11. void buildMax(int id, int l, int r) {
  12.     if (l == r) stMax[id] = a[l];
  13.     else {
  14.         int mid = (l + r) / 2;
  15.         buildMax(id*2, l, mid);
  16.         buildMax(id*2 + 1, mid + 1, r);
  17.        
  18.         stMax[id] = max(stMax[id*2], stMax[id*2 + 1]);
  19.     }
  20. }
  21.  
  22. int getMax(int u, int v, int id, int l, int r) {
  23.     if (v < l || r < u) return -INF;
  24.     if (u <= l && r <= v) return stMax[id];
  25.    
  26.     int mid = (l + r) / 2;
  27.     return max(getMax(u, v, id*2, l, mid), getMax(u, v, id*2 + 1, mid + 1, r));
  28. }
  29.  
  30. int main()
  31. {
  32.     ios_base::sync_with_stdio(false);
  33.     cin.tie(NULL); cout.tie(NULL);
  34.  
  35.     cin >> n >> m;
  36.    
  37.     while (m--) {
  38.         int u, v, k; cin >> u >> v >> k;
  39.         for (int i = u; i <= v; ++i)
  40.             a[i] += k;
  41.     }
  42.    
  43.     buildMax(1, 1, n);
  44.    
  45.     cin >> p;
  46.    
  47.     while (p--) {
  48.        int u, v; cin >> u >> v;
  49.        cout << getMax(u, v, 1, 1, n);
  50.        cout << '\n';
  51.     }
  52.    
  53.     return 0;
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment