はまやんはまやんはまやん

hamayanhamayan's blog

Maximums [Codeforces Global Round 7 B]

https://codeforces.com/contest/1326/problem/B

解説

https://codeforces.com/contest/1326/submission/73896052

実は順番に構築していけばいい。
x[0]は0で固定。
b[i]=a[i]-x[i]なので、a[i]=b[i]+x[i]である。
なので、a[0]=b[0]+x[0]を使って、a[0]を計算可能。
a[0]があれば、x[1]が計算できる。
a[1]=b[1]+x[1]でa[i]を計算。
a[0],a[1]があれば、x[2]が計算できる。
これを繰り返せば構築可能。

int N; ll B[201010];
ll A[201010], X[201010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> B[i];

    ll ma = 0;
    X[0] = 0;
    rep(i, 0, N) {
        // A[i] - X[i] = B[i]
        A[i] = B[i] + X[i];
        chmax(ma, A[i]);
        X[i + 1] = ma;
    }

    rep(i, 0, N) {
        if(i) printf(" ");
        printf("%lld", A[i]);
    }
    printf("\n");
}