canuc80k0508·9/50

Chia Dãy Cân Bằng

Nộp bài trên LQDOJ

Bài 05 · Binary Search

Cho dãy số nguyên dương. Hãy đặt đường cắt để chia dãy thành đúng đoạn liên tiếp, không rỗng và phủ toàn bộ dãy.

Giá của một cách chia là tổng lớn nhất trong số đoạn. Hãy tìm giá nhỏ nhất có thể của giá này.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa số nguyên dương .

Output

  • In giá nhỏ nhất có thể của tổng đoạn lớn nhất.

Constraints

  • .
  • .

Scoring

  • Subtask ( điểm): .
  • Subtask ( điểm): không có giới hạn bổ sung.

Example

Test 1

Input

7 3
4 2 7 3 5 1 6

Output

12

Giải thích: Cách chia có tổng lớn nhất bằng ; với giới hạn , phép quét tham lam cần bốn đoạn nên không thể chia thành ba đoạn.

Lời giải tóm tắt
  • Ý tưởng: Giả sử giới hạn tổng mỗi đoạn là M. Vì các phần tử dương, cách quét tham lam - kéo dài đoạn hiện tại tối đa rồi mới cắt - dùng số đoạn ít nhất có thể dưới giới hạn M. Giới hạn khả thi khi số đoạn đó không vượt k; nếu dùng ít hơn k, có thể tách thêm tại các vị trí vì mọi phần tử dương và k≤n.
  • Ý tưởng: Tính khả thi không giảm theo M, nên chặt nhị phân giá trị nhỏ nhất trong đoạn từ max(a_i) đến Σa_i.
  • Ý tưởng: Tính đúng đắn: greedy tối thiểu hóa số đoạn cho một M; do đó parts≤k tương đương tồn tại cách chia đúng k đoạn. First true của điều kiện này chính là giá nhỏ nhất cần tìm.
  • Ý tưởng: Độ phức tạp là O(n log Σa_i) thời gian và O(n) bộ nhớ.