Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6. vector<long> a, t, add;
  7. void build(int v, int l, int r){
  8.     if (l == r)
  9.         t[v] = a[l];
  10.     else{
  11.         int m = (l+r)/2;
  12.         build(2*v, l, m);
  13.         build(2*v+1, m+1, r);
  14.         t[v] = max(t[2*v], t[2*v+1]);
  15.     }
  16. }
  17. void push(int v){
  18.     if (add[v] != 0){
  19.         t[2*v] += add[v];
  20.         t[2*v+1] += add[v];
  21.         add[2*v] += add[v]; add[2*v+1] += add[v];
  22.         add[v] = 0;
  23.     }
  24. }
  25. int get(int v, int l, int r, int tl, int tr){
  26.     if (l > r) return -INT_MAX;
  27.     if (l == tl && r == tr)
  28.         return t[v];
  29.     push(v);
  30.     int m = (l+r)/2;
  31.     return max(get(2*v+1, m+1, r, max(m+1, tl), tr), get(2*v, l, m, tl, min(tr, m)));
  32. }
  33.  
  34. void update(int v, int l, int r, int tl, int tr, int a){
  35.     if (l > r) return;
  36.     if (l == tl && r == tr) {
  37.         t[v] += a;
  38.         add[v] += a;
  39.         return;
  40.     }
  41.     int m = (l+r)/2;
  42.     push(v);
  43.     update(2*v+1, m+1, r, max(tl, m+1), tr, a);
  44.     update(2*v, l, m, tl, min(tr, m), a);
  45.     t[v] = max(t[2*v], t[2*v+1]);
  46. }
  47. int main(){
  48.     ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
  49.     cin >> n; a.resize(n); t.resize(4*n+4); add.resize(4*n+4);
  50.     for (int i = 0; i < n;++i)
  51.         cin >> a[i];
  52.     build(1, 0, n-1);
  53.     int k; cin >> k;
  54.     char ch; int l, r, w;
  55.     for (int i = 0; i < k; ++i){
  56.         cin >> ch;
  57.         if (ch == 'm'){
  58.             cin >> l >> r;
  59.             cout << get(1, 0, n-1, l-1, r-1) << ' ';
  60.         }
  61.         else{
  62.             cin >> l >> r >> w;
  63.             update(1, 0, n-1, l-1, r-1, w);
  64.         }
  65.     }
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement