Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #pragma GCC optmize("Ofast")
  2. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
  3. #pragma GCC optimize("unroll-loops")
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. #define forn(i, s, f) for (int i = s; i < f; i++)
  9. #define pii pair <int, int>
  10. #define fs first
  11. #define sc second
  12. #define pb push_back
  13. #define all(x) (x).begin(), (x).end()
  14.  
  15. typedef long long ll;
  16.  
  17. vector <int> tr, a, to_add;
  18.  
  19. void build(int v, int vl, int vr) {
  20.     if (vr - vl == 1) {
  21.         tr[v] = a[vl];
  22.         return;
  23.     }
  24.     int vm = (vl + vr) / 2;
  25.     build(2 * v, vl, vm), build(2 * v + 1, vm, vr);
  26.     tr[v] = max(tr[2 * v], tr[2 * v + 1]);
  27. }
  28.  
  29. void push(int v, int vl, int vr) {
  30.     if (vr - vl != 1) {
  31.         to_add[2 * v] += to_add[v];
  32.         to_add[2 * v + 1] += to_add[v];
  33.     }
  34.     tr[v] += to_add[v];
  35.     to_add[v] = 0;
  36. }
  37.  
  38. void add(int v, int vl, int vr, int l, int r, int x) {
  39.     push(v, vl, vr);
  40.     if (vr <= l || r <= vl)
  41.         return;
  42.     if (l <= vl && vr <= r) {
  43.         to_add[v] += x;
  44.         push(v, vl, vr);
  45.         return;
  46.     }
  47.     int vm = (vl + vr) / 2;
  48.     add(2 * v, vl, vm, l, r, x), add(2 * v + 1, vm, vr, l, r, x);
  49.     tr[v] = max(tr[2 * v], tr[2 * v + 1]);
  50. }
  51.  
  52. int get(int v, int vl, int vr, int l, int r) {
  53.     //cout << v << "\n";
  54.     push(v, vl, vr);
  55.     if (vr <= l || r <= vl)
  56.         return -1;
  57.     if (l <= vl && vr <= r)
  58.         return tr[v];
  59.     int vm = (vl + vr) / 2;
  60.     return max(get(2 * v, vl, vm, l, r), get(2 * v + 1, vm, vr, l, r));
  61. }
  62.  
  63. int main() {
  64.     ios_base::sync_with_stdio(0), cin.tie(0);
  65.     int n;
  66.     cin >> n;
  67.     tr.resize(4 * n, -1), to_add.resize(4 * n), a.resize(n);
  68.     forn (i, 0, n)
  69.         cin >> a[i];
  70.     build(1, 0, n);
  71.     int q;
  72.     cin >> q;
  73.     while (q --> 0) {
  74.         char c;
  75.         cin >> c;
  76.         if (c == 'm') {
  77.             int l, r;
  78.             cin >> l >> r;
  79.             l--;
  80.             cout << get(1, 0, n, l, r) << " ";
  81.         } else {
  82.             int l, r, x;
  83.             cin >> l >> r >> x;
  84.             l--;
  85.             add(1, 0, n, l, r, x);
  86.         }
  87.     }
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement