CF1326B

因为 (x_i=max{0,a_1sim 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_1sim a_{2-1}}=a_2-max{0,a_1})(b_3=a_3-x_3=a_3-max{0,a_1sim a_{3-1}}=a_3-max{0,a_1sim a_2}),……

因为数组 (b) 的值已知,所以只需维护 (max{a_1sim 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]<<' ';
}
原文地址:https://www.cnblogs.com/Xray-luogu/p/12574911.html