Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <memory.h>
- #include <stdio.h>
- #include <stack>
- #include <deque>
- #include <queue>
- #include <set>
- #include <iterator>
- #include <map>
- #include <iomanip>
- #include <unordered_set>
- #define int long long
- #define pb push_back
- #define double long double
- #define endl "\n"
- #define un unsigned
- #define INF 1000000009
- #define pii pair<int, int>
- #define all(v) v.begin(), v.end()
- using namespace std;
- const int R = 1 << 18;
- vector<int> vc;
- vector<int> fl;
- void build()
- {
- for (int i = R - 1; i >= 1; i--)
- {
- vc[i] = max(vc[i * 2 + 1], vc[i * 2]);
- }
- return;
- }
- void push(int node)
- {
- for (int i = 0; i < 2; i++)
- {
- vc[2 * node + i] += fl[node];
- fl[2 * node + i] += fl[node];
- }
- fl[node] = 0;
- return;
- }
- void modify(int ql, int qr, int node, int nl, int nr, int add)
- {
- if (qr < nl || nr < ql)
- {
- return;
- }
- if (ql <= nl && nr <= qr)
- {
- vc[node] += add;
- fl[node] += add;
- return;
- }
- push(node);
- int nm = (nl + nr) / 2;
- modify(ql, qr, 2 * node, nl, nm, add);
- modify(ql, qr, 2 * node + 1, nm + 1, nr, add);
- vc[node] = max(vc[node * 2], vc[node * 2 + 1]);
- return;
- }
- int MAX(int ql, int qr, int node, int nl, int nr)
- {
- if (nl >= ql && nr <= qr)
- {
- return vc[node];
- }
- if (ql > nr || nl > qr)
- {
- return -1;
- }
- push(node);
- int nm = (nl + nr) / 2;
- int sl = MAX(ql, qr, 2 * node, nl, nm);
- int sr = MAX(ql, qr, 2 * node + 1, nm + 1, nr);
- return max(sl, sr);
- }
- signed main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n;
- cin >> n;
- vc.resize(2 * R + 1, -1);
- fl.resize(2 * R + 1, 0);
- for (int i = 0; i < n; i++)
- {
- cin >> vc[i + R];
- }
- build();
- int t;
- cin >> t;
- for (int i = 0; i < t; i++)
- {
- char c;
- cin >> c;
- if (c == 'm')
- {
- int l, r;
- cin >> l >> r;
- cout << MAX(l, r, 1, 1, R) << endl;
- }
- else
- {
- int l, r, add;
- cin >> l >> r >> add;
- modify(l, r, 1, 1, R, add);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement