#1225. 最大子段和

最大子段和

题目描述

给出一个长度为 nn 的序列 aa,选出其中连续且非空的一段使得这段和最大。

输入格式

第一行是一个整数,表示序列的长度 nn。

第二行有 nn 个整数,第 ii 个整数表示序列的第 ii 个数字 aia_i。

输出格式

输出一行一个整数表示答案。

数据范围

对于 40%40\% 的数据,保证 n≤2×103n \le 2 \times 10^3。

对于 100%100\% 的数据,保证 1≤n≤2×1051 \le n \le 2 \times 10^5,−104≤ai≤104-10^4 \le a_i \le 10^4。

样例

输入样例 1

7
2 -4 3 -1 2 -4 3

输出样例 1

4

提示

选取 [3,5][3, 5] 子段 {3,−1,2}\{3, -1, 2\},其和为 44。

O(n2)O(n^2) 的暴力枚举所有子段可以通过 40%40\% 的数据;满分需要 O(n)O(n) 的做法(例如:设 fif_i 表示以 ii 结尾的最大子段和,则 fi=max⁡(fi−1,0)+aif_i = \max(f_{i-1}, 0) + a_i,答案是所有 fif_i 的最大值)。