제출 #1327837

#제출 시각아이디문제언어결과실행 시간메모리
1327837hssaan_arifGrowing Vegetables is Fun 4 (JOI21_ho_t1)C++20
100 / 100
19 ms1980 KiB
#include <bits/stdc++.h>
using namespace std;

static const long long INF = -1e18;
static const int MAXN = 3e5 + 5;

int n;
long long a[MAXN];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

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

    int l = 0, r = n + 1;
    long long ans = 0;

    while (l + 1 < r) {

        if (l + 2 == r) {
            long long x = max(0LL, a[l] - a[l + 1] + 1);
            long long y = max(0LL, a[r] - a[r - 1] + 1);
            long long add = min(x, y);
            a[l + 1] += add;
            ans += add;
            if (a[l + 1] == a[l] || a[l + 1] == a[r]) ans++;
            break;
        }

        if (a[l + 1] > a[l]) {
            ++l;
            if (l + 2 < r) a[l + 1] += ans;
            continue;
        }

        if (a[r - 1] > a[r]) {
            --r;
            if (l + 2 < r) a[r - 1] += ans;
            continue;
        }

        long long add = min(
            a[l] - a[l + 1] + 1,
            a[r] - a[r - 1] + 1
        );

        ans += add;
        a[l + 1] += add;
        a[r - 1] += add;
    }

    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...