//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define vecint vector <int>
#define pb push_back
#define all(v) (v).begin(), (v).end()
#define R(i, j, k) for(int i = (j); i >= (k); i--)
#define L(i, j, k) for(int i = (j); i <= (k); i++)
const int N = 2e5 + 17;
const int mod = 1e9 + 7;
using namespace std;
//using namespace __gnu_pbds;
//template <typename T>
//using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
/*struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};*/
int dp[N * 4][2][2], L[N * 4], R[N * 4];
int a[N], b[N];
void f(int v, int l, int r) {
int m = (l + r) >> 1;
int x = v * 2, y = v * 2 + 1;
L[v] = L[x];
R[v] = R[y];
for(auto i : {0, 1}){
for(auto j : {0, 1}){
dp[v][i][j] = 0;
}
}
for(int i = 0; i < 2; i++){
for(int j = 0; j < 2; j++){
for(int k = 0; k < 2; k++){
for(int l = 0; l < 2; l++){
if(j && k){
if((R[x] < 0) == (L[y] < 0)){
dp[v][i][l] = max(dp[v][i][l], dp[x][i][j] + dp[y][k][l]);
}
}
else{
dp[v][i][l] = max(dp[v][i][l], dp[x][i][j] + dp[y][k][l]);
}
}
}
}
}
}
void upd(int v, int tl, int tr, int i, int val) {
if(tl > i || tr < i) {
return;
}
if(tl == tr) {
L[v] += val;
R[v] += val;
dp[v][1][1] = abs(L[v]);
return;
}
int m = (tl + tr) >> 1;
upd(v + v, tl, m, i, val);
upd(v + v + 1, m + 1, tr, i, val);
f(v, tl, tr);
}
void solve(){
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++){
cin>>a[i];
if(i >= 2){
upd(1, 1, n - 1, i - 1, a[i] - a[i - 1]);
}
}
while(q--) {
int l, r, x;
cin >> l >> r >> x;
if(l - 1 >= 1) upd(1, 1, n - 1, l - 1, x);
if(r < n) upd(1, 1, n - 1, r, -x);
cout<<dp[1][1][1]<<'\n';
}
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
//freopen("ohwow.txt", "r", stdin);
//freopen("superbull.out", "w", stdout);
int tt = 1;
//cin >> tt;
while(tt--) {
solve();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |