Submission #1098594

#TimeUsernameProblemLanguageResultExecution timeMemory
1098594duytuandao21Sjeckanje (COCI21_sjeckanje)C++17
110 / 110
383 ms29520 KiB
#include<bits/stdc++.h> using namespace std; const int N = 2e6 + 7; const int inf = 1e9 + 7; const long long infll = 1e18 + 7; int n, q; long long a[N], b[N]; long long seg[4 * N][2][2]; void update(int id, int l, int r, int pos, int v) { if (r < pos || l > pos) return; if (l == r) { if (l == pos) b[l] += v; seg[id][1][1] = abs(b[l]); seg[id][0][0] = 0; return; } int mid = (l + r) / 2; update(id * 2, l, mid, pos, v); update(id * 2 + 1, mid + 1, r, pos, v); int x = id * 2, y = id * 2 + 1; //merge two segment; seg[id][0][0] = max(seg[x][0][0] + seg[y][0][0], max(seg[x][0][1] + seg[y][0][0], seg[x][0][0] + seg[y][1][0])); seg[id][1][0] = max(seg[x][1][0] + seg[y][0][0], max(seg[x][1][1] + seg[y][0][0], seg[x][1][0] + seg[y][1][0])); seg[id][0][1] = max(seg[x][0][0] + seg[y][0][1], max(seg[x][0][1] + seg[y][0][1], seg[x][0][0] + seg[y][1][1])); seg[id][1][1] = max(seg[x][1][0] + seg[y][0][1], max(seg[x][1][1] + seg[y][0][1], seg[x][1][0] + seg[y][1][1])); if ((b[mid] < 0 && b[mid + 1] < 0) || (b[mid] > 0 && b[mid + 1] > 0)) { seg[id][0][0] = max(seg[id][0][0], seg[x][0][1] + seg[y][1][0]); seg[id][1][0] = max(seg[id][0][0], seg[x][1][1] + seg[y][1][0]); seg[id][0][1] = max(seg[id][0][0], seg[x][0][1] + seg[y][1][1]); seg[id][1][1] = max(seg[id][0][0], seg[x][1][1] + seg[y][1][1]); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> q; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i < n; i++) { update(1, 1, n - 1, i, a[i] - a[i + 1]); } while (q--) { int l, r; long long v; cin >> l >> r >> v; update(1, 1, n - 1, l - 1, -v); update(1, 1, n - 1, r, v); cout << seg[1][1][1]; if (q > 0) cout << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...