제출 #827262

#제출 시각아이디문제언어결과실행 시간메모리
827262borisAngelovSjeckanje (COCI21_sjeckanje)C++17
55 / 110
2050 ms7980 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 200005;

int n, q;
int a[maxn];

long long dp[maxn];
long long pref[maxn];
long long delta[maxn];

bool is_diff(long long x, long long y)
{
    if (x > 0 && y < 0)
    {
        return true;
    }

    if (x < 0 && y > 0)
    {
        return true;
    }

    return false;
}

void solve()
{
    for (int i = 1; i <= n - 1; ++i)
    {
        delta[i] = a[i + 1] - a[i];
    }

    dp[1] = abs(delta[1]);

    for (int i = 2; i <= n - 1; ++i)
    {
        pref[i] = max(dp[i - 1], pref[i - 1]);

        if (is_diff(delta[i], delta[i - 1]) == false)
        {
            dp[i] = max(dp[i - 1], pref[i - 1]) + abs(delta[i]);
        }
        else
        {
            dp[i] = pref[i - 1] + abs(delta[i]);
        }
    }

    cout << max(dp[n - 1], pref[n - 1]) << "\n";
}

void fastIO()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

int main()
{
    fastIO();

    cin >> n >> q;

    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i];
    }

    for (int i = 1; i <= q; ++i)
    {
        int l, r, x;
        cin >> l >> r >> x;

        for (int j = l; j <= r; ++j)
        {
            a[j] += x;
        }

        solve();
    }

    return 0;
}

/*
4 3
1 2 3 4
1 2 1
1 1 2
2 3 1

4 1
1 2 3 4
1 2 1
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...