Mảng con có tổng lớn nhất sau khi xoá

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1400 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một mảng số nguyên \(a\) độ dài \(n\). Bạn cần chọn ra một mảng con liên tiếp không rỗng của \(a\). Sau khi chọn, bạn được phép xóa tối đa một phần tử khỏi mảng con đó (hoặc giữ nguyên không xóa phần tử nào).

Hãy tìm tổng lớn nhất có thể đạt được của mảng con sau khi thực hiện thao tác trên.

Lưu ý: Mảng con sau khi xóa (nếu có) không được phép rỗng. Nghĩa là nếu bạn chọn mảng con chỉ có 1 phần tử, bạn không được phép xóa phần tử đó.

Input

  • Dòng đầu tiên chứa một số nguyên dương \(n\) — số lượng phần tử của mảng.
  • Dòng thứ hai chứa \(n\) số nguyên \(a_1, a_2, \dots, a_n\) cách nhau bởi khoảng trắng.

Output

  • In ra một số nguyên duy nhất là tổng lớn nhất có thể đạt được.

Constraints

  • \(1 \le n \le 10^5\)
  • \(-10^4 \le a_i \le 10^4\)

Example

Test 1

Input
4
1 -2 0 3
Output
4
Note

Bạn chọn mảng con \([1, -2, 0, 3]\) và xóa đi phần tử \(-2\). Tổng còn lại là \(1 + 0 + 3 = 4\).

Test 2

Input
4
1 -2 -2 3
Output
3
Note

Bạn chọn mảng con chỉ gồm phần tử \([3]\) và không xóa phần tử nào. (Nếu bạn chọn \([1, -2, -2, 3]\) và xóa một số \(-2\), tổng chỉ là \(1 - 2 + 3 = 2\), nhỏ hơn \(3\)).

Test 3

Input
3
-1 -2 -3
Output
-1
Note

Bạn chọn mảng con \([-1]\) và không xóa gì cả. Không thể chọn \([-1]\) rồi xóa nó vì mảng con kết quả không được phép rỗng.

Scoring

  • Subtask \(1\) (\(20\%\) số điểm): \(n \le 500\).
  • Subtask \(2\) (\(30\%\) số điểm): \(n \le 5000\).
  • Subtask \(3\) (\(50\%\) số điểm): Không có ràng buộc gì thêm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.