canuc80k1125·26/50

Đoạn Liên Tiếp Tốt Nhất

Nộp bài trên LQDOJ

Bài 11 · Divide and Conquer

Cho dãy số nguyên . Chọn hai chỉ số thỏa mãn . Điểm của lựa chọn là

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 .
  • Dòng thứ hai chứa số nguyên .

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

  • .
  • .

Scoring

  • Subtask ( điểm): .
  • Subtask ( đ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í đến vị trí , có tổng . Mọi đoạn liên tiếp khác đều có tổng không lớn hơn .

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 , bộ nhớ ngăn xếp .