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 <bits/stdc++.h>
using namespace std;
#define int long long
const int NMAX = 20;
int N,Q,A[NMAX],D[NMAX],L[NMAX],R[NMAX],t = 1;
int dp[NMAX * 4][2][2],border[NMAX * 4][2];
// 1 - e prezent capatul
void combine(int dad,int left,int right) {
dp[dad][0][0] = dp[dad][0][1] = dp[dad][1][0] = dp[dad][1][1] = 0;
for (int l = 0; l < 2;++l) {
for (int r = 0; r < 2;++r)
for (int a = 0; a < 2;++a)
for (int b = 0; b < 2;++b) {
if (l && r) {
if (border[left][1] * border[right][0] > 0)
dp[dad][a][b] = max(dp[dad][a][b],dp[left][a][l] + dp[right][r][b]);
}
else {
dp[dad][a][b] = max(dp[dad][a][b],dp[left][a][l] + dp[right][r][b]);
}
}
}
border[dad][0] = border[left][0];
border[dad][1] = border[right][1];
}
void add(int i,int v,int l,int r,int x) {
if (l == r) {
dp[x][0][0] = dp[x][0][1] = dp[x][1][0] = 0;
border[x][0] += v;
border[x][1] += v;
dp[x][1][1] = abs(border[x][0]);
return;
}
int mid = (l + r) / 2;
if (L[x] == 0) {
L[x] = ++t;
}
if (R[x] == 0) {
R[x] = ++t;
}
if (i <= mid) add(i,v,l,mid,L[x]);
else add(i,v,mid + 1,r,R[x]);
combine(x,L[x],R[x]);
//cout << l << ' ' << r << '\n';
//cout << dp[x][0][0] << ' ' << dp[x][0][1] << ' ' << dp[x][1][0] << ' ' << dp[x][1][1] << '\n';
}
void solve() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> Q;
for (int i = 1; i <= N;++i) {
cin >> A[i];
D[i] = A[i + 1] - A[i];
if (i != N)
add(i,D[i],1,N - 1,1);
}
for (int q = 1; q <= Q;++q) {
int l,r,k; cin >> l >> r >> k;
if (l > 1) add(l - 1,k,1,N - 1,1);
if (r < N) add(r,-k,1,N - 1,1);
cout << dp[1][1][1] << '\n';
}
}
main() {
solve();
}
// te-n gura gintule
Compilation message (stderr)
Main.cpp:67:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
67 | main() {
| ^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |