#include <bits/stdc++.h>
#define task "testing"
#define int long long
#define multitest 0
using namespace std;
struct Data {
int ans, pre, suf;
};
const int N = 2e5;
int a[N+5];
Data st[4*N+5];
Data merge(Data u, Data v) {
Data res = {u.ans+v.ans, u.pre, v.suf};
if (u.suf*v.pre < 0) {
res.ans -= min(abs(u.suf), abs(v.pre));
}
return res;
}
void upd(int nd, int lf, int rt, int u, int v) {
if (u < lf || rt < u) return;
if (lf == rt) {
st[nd].ans = abs(st[nd].suf = (st[nd].pre += v));
return;
}
int mid = (lf+rt)/2;
upd(nd*2, lf, mid, u, v);
upd(nd*2+1, mid+1, rt, u, v);
st[nd] = merge(st[nd*2], st[nd*2+1]);
}
void flo(int ID) {
int n, q; cin >> n >> q;
for (int x = 1; x <= n; x++) cin >> a[x];
for (int x = 1; x < n; x++) {
upd(1, 1, n-1, x, a[x+1]-a[x]);
}
while (q--) {
int l, r, x; cin >> l >> r >> x;
upd(1, 1, n-1, l-1, x);
upd(1, 1, n-1, r, -x);
cout << st[1].ans << "\n";
}
}
signed 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);
}
int TCS = 1, ID = 1;
if (multitest) {
cin >> TCS;
}
while (TCS--) flo(ID++);
return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:68:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
68 | freopen(task".inp", "r", stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:69:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
69 | freopen(task".out", "w", stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |