因爲 \(x_i=\max\{0,a_1\sim a_{i-1}\}\),所以當 \(i=1\) 時,\(x_i=0\)。
又因爲 \(b_i=a_i-x_i\),所以 \(b_1=a_1-x_1=a_1-0=a_1\)。
以此類推,\(b_2=a_2-x_2=a_2-\max\{0,a_1\sim a_{2-1}\}=a_2-\max\{0,a_1\}\),\(b_3=a_3-x_3=a_3-\max\{0,a_1\sim a_{3-1}\}=a_3-\max\{0,a_1\sim a_2\}\),……
因爲數組 \(b\) 的值已知,所以只需維護 \(\max\{a_1\sim a_{i-1}\}\) 的值即可得到數組 \(a\) 的值。
Code:
const int maxN=200005;
int n,b[maxN],a[maxN];
int main() {
cin>>n;
for (int i=1;i<=n;i++) cin>>b[i];
a[1]=b[1];
int maxx=max(a[1],0);
for (int i=2;i<=n;i++) a[i]=maxx+b[i],maxx=max(0,max(maxx,a[i]));
for (int i=1;i<=n;i++) cout<<a[i]<<' ';
}