Cho dãy số nguyên A=(a1,a2,…,aN). Chọn hai chỉ số l,r thỏa mãn 1≤l≤r≤N. Điểm của lựa chọn là
al+al+1+⋯+ar.
Hãy tìm điểm lớn nhất có thể đạt được. Đoạn được chọn phải có ít nhất một phần tử; không được dùng đoạn rỗng.
Input
Dòng đầu chứa số nguyên N.
Dòng thứ hai chứa N số nguyên a1,a2,…,aN.
Output
In một số nguyên: tổng lớn nhất của một đoạn con liên tiếp không rỗng.
Constraints
1≤N≤2⋅105.
−109≤ai≤109.
Scoring
Subtask 1 (50 điểm): N≤200.
Subtask 2 (50 điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
7
-4 6 -2 5 -7 4 3
Output
9
Giải thích: Chọn đoạn từ vị trí 2 đến vị trí 4, có tổng 6−2+5=9. Mọi đoạn liên tiếp khác đều có tổng không lớn hơn 9.
Lời giải tóm tắt
Thông tin trả về của một đoạn: Với mỗi đoạn, lưu bốn đại lượng: tổng toàn đoạn, tổng prefix không rỗng lớn nhất, tổng suffix không rỗng lớn nhất và tổng đoạn con không rỗng lớn nhất.
Phép gộp: Một prefix tối ưu hoặc nằm hoàn toàn trong nửa trái, hoặc lấy toàn bộ nửa trái rồi nối prefix tốt nhất của nửa phải. Công thức suffix đối xứng. Đoạn con tối ưu nằm trong một nửa hoặc cắt qua ranh giới; trường hợp cuối bằng suffix tốt nhất bên trái cộng prefix tốt nhất bên phải.
Chứng minh tính đúng đắn: Đoạn một phần tử có cả bốn giá trị bằng chính phần tử đó. Giả sử hai nửa đã trả về đúng bốn trạng thái. Các công thức gộp liệt kê đầy đủ và không lặp mọi dạng prefix, suffix và đoạn con có thể xuất hiện trong đoạn cha. Vì vậy bốn giá trị của đoạn cha cũng đúng; quy nạp theo độ dài cho kết quả ở gốc.
Độ phức tạp: Thời gian O(N), bộ nhớ ngăn xếp O(logN).