Submission #1145235

#TimeUsernameProblemLanguageResultExecution timeMemory
1145235arashmemarSjeckanje (COCI21_sjeckanje)C++20
0 / 110
1 ms320 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 2e5 + 100; long long int a[maxn]; struct Node { int L, R, mid; long long int s[4]; Node *lc, *rc; Node(int l, int r) { L = l, R = r, mid = (L + R) / 2, s[0] = s[1] = s[2] = s[3] = 0, lc = rc = NULL; return ; } void cu() { for (int i = 0;i < 4;i++) { int ul = i % 2, ur = (i >> 1); s[i] = lc->s[ul] + rc->s[ur * 2]; s[i] = max(s[i], lc->s[ul + 2] + rc->s[ur * 2]); s[i] = max(s[i], lc->s[ul] + rc->s[ur * 2 + 1]); if ((a[mid] >= 0 and a[mid - 1] >= 0) or (a[mid] <= 0 and a[mid - 1] <= 0)) { s[i] = max(s[i], lc->s[ul + 2] + rc->s[ur * 2 + 1]); } } return ; } void init() { if (R - L == 1) { s[3] = abs(a[L]); return ; } lc = new Node(L, mid); rc = new Node(mid, R); lc->init(); rc->init(); cu(); return ; } void update(int p) { if (p < L or p >= R) { return ; } if (R - L == 1) { s[3] = abs(a[L]); return ; } if (p < mid) { lc->update(p); } else { rc->update(p); } cu(); return ; } int get() { return max(max(s[0], s[1]), max(s[2], s[3])); } }; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, q; cin >> n >> q; for (int i = 1;i <= n;i++) { cin >> a[i]; } for (int i = 1;i <= n;i++) { a[i] = a[i + 1] - a[i]; } Node *root = new Node(1, n); root->init(); // cout << root->get() << endl; // // for (int i = 1;i < n;i++) // { // cout << a[i] << ' '; // } // cout << endl; while (q--) { int l, r, x; cin >> l >> r >> x; a[l - 1] += x; a[l] -= x; root->update(l - 1); root->update(l); if (r != l) { a[r] -= x; a[r - 1] += x; root->update(r); root->update(r - 1); } // for (int i = 1;i < n;i++) // { // cout << a[i] << ' '; // } // cout << endl; cout << root->get() << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...