This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#define int long long
#define left (id+1)
#define mid ((l+r)/2)
#define right (id+2*(mid-l+1))
const int INF = 1'000'000'000'000'000;
struct node
{
int val[3][3];
void add(int v) {
for(int i = 0; i < 3; i++) {
val[0][i] -= v;
val[2][i] += v;
val[i][0] -= v;
val[i][2] += v;
}
}
};
node empty = {{{-INF, 0, -INF}, {0, 0, 0}, {-INF, 0, -INF}}};
node get(int x) {
node next = empty;
next.val[0][1] = next.val[1][0] = -x;
next.val[2][1] = next.val[1][2] = x;
return next;
}
node merge(node &a, node &b) {
node next;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
next.val[i][j] = std::max(a.val[i][j], b.val[i][j]);
for(int k = 0; k < 3; k++)
next.val[i][j] = std::max(next.val[i][j], a.val[i][k] + b.val[2-k][j]);
}
}
return next;
}
int n;
struct seg
{
std::vector<node> arr;
std::vector<int> lazy;
void push(int id, int l, int r) {
if(lazy[id]) {
arr[left].add(lazy[id]);
arr[right].add(lazy[id]);
lazy[left] += lazy[id];
lazy[right] += lazy[id];
lazy[id] = 0;
}
}
void update(int x, int y, int v, int id = 0, int l = 0, int r = n-1) {
if(y < l || r < x)
return;
if(x <= l && r <= y) {
lazy[id] += v;
arr[id].add(v);
return;
}
push(id, l, r);
update(x, y, v, left, l, mid);
update(x, y, v, right, mid+1, r);
arr[id] = merge(arr[left], arr[right]);
}
};
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int q;
std::cin >> n >> q;
seg tree;
tree.arr = std::vector<node>(2*n-1, empty);
tree.lazy = std::vector<int>(2*n-1, 0);
for(int i = 0; i < n; i++) {
int x;
std::cin >> x;
tree.update(i, i, x);
}
while(q--) {
int l, r, v;
std::cin >> l >> r >> v;
l--; r--;
tree.update(l, r, v);
std::cout << tree.arr[0].val[1][1] << std::endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |