CF1326B - Maximums 題解

因爲 \(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]<<' ';
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章