canuc80k0609·10/50

Đoạn Việc Trong Ngân Sách

Nộp bài trên LQDOJ

Bài 0.7 · Two Pointers

Có công việc theo một thứ tự cố định. Công việc thứ cần đơn vị thời gian. Bạn phải chọn một đoạn liên tiếp các công việc và thực hiện toàn bộ đoạn đó theo đúng thứ tự.

Tổng thời gian của đoạn được chọn không được vượt quá ngân sách . Bạn cũng có thể chọn đoạn rỗng, có độ dài . Hãy tìm số công việc lớn nhất có thể chọn.

Input

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

Output

  • In một số nguyên - độ dài lớn nhất của một đoạn liên tiếp có tổng không vượt .

Constraints

  • .
  • .
  • .

Scoring

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

Example

Test 1

Input

7 10
6 2 3 5 1 1 4

Output

4

Giải thích: Đoạn có tổng đúng và độ dài . Mọi đoạn dài đều vượt ngân sách.

Lời giải tóm tắt
  • Phân tích: Mọi thời lượng đều dương. Khi thêm phần tử bên phải, tổng chỉ tăng; khi bỏ phần tử bên trái, tổng chỉ giảm. Vì vậy một cửa sổ co giãn có thể tìm đoạn dài nhất cho từng đầu phải.
  • Thuật toán: Cộng a[r] vào tổng. Trong khi tổng lớn hơn T, trừ a[l] và tăng l. Sau đó cập nhật đáp án bằng r-l+1.
  • Chứng minh đúng: Sau vòng co, [l,r] là cửa sổ hợp lệ có đầu trái nhỏ nhất trong mọi cửa sổ kết thúc tại r; mọi đầu trái nhỏ hơn đều làm tổng vượt T. Do đó đây là đoạn hợp lệ dài nhất kết thúc tại r, và lấy lớn nhất trên mọi r cho đáp án.
  • Độ phức tạp: Thời gian O(n), bộ nhớ O(n).