Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define task "EDITOR"
- #include <iostream>
- #include <cstdio>
- using namespace std;
- using ll = long long;
- using ld = long double;
- constexpr int N = 2e5 + 5;
- constexpr ll Inf = 1e17;
- int n, q;
- ll a[N], pref[N], suf[N], b[N];
- void Read()
- {
- cin >> n >> q;
- for (int i = 1; i <= n; ++i)
- cin >> a[i];
- }
- void Solve()
- {
- pref[0] = suf[0] = -Inf;
- for (int i = 1; i <= n; ++i)
- {
- a[i] += a[i - 1];
- pref[i] = max(pref[i - 1], a[i]);
- }
- int m1 = n, m2 = 0;
- ll up(0);
- while (q--)
- {
- char t;
- int x;
- cin >> t;
- if (t == 'A')
- {
- cin >> x;
- ++m1;
- a[m1] = a[m1 - 1] + x;
- pref[m1] = max(pref[m1 - 1], a[m1]);
- }
- else if (t == 'D')
- {
- --m1;
- }
- else if (t == 'L')
- {
- x = a[m1] - a[m1 - 1];
- --m1;
- up += x;
- ++m2;
- b[m2] = x - up;
- suf[m2] = max(suf[m2 - 1], b[m2]);
- }
- else if (t == 'R')
- {
- x = b[m2] + up;
- up -= x;
- --m2;
- ++m1;
- a[m1] = a[m1 - 1] + x;
- pref[m1] = max(pref[m1 - 1], a[m1]);
- }
- else
- {
- cout << max(pref[m1], suf[m2] + up + a[m1]) << "\n";
- }
- }
- }
- int32_t main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- if (fopen(task ".INP", "r"))
- {
- freopen(task ".INP", "r", stdin);
- freopen(task ".OUT", "w", stdout);
- }
- Read();
- Solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement