Có ~n~ học sinh được xếp thành một hàng. Học sinh thứ ~i~ được cấp một bảng nhỏ, trên đó viết một số nguyên ~a_i~ ~(|a_i| \le 10^9)~.
Một phép chia dãy học sinh ban đầu thành ~k~ đoạn liên tiếp được biểu diễn bằng dãy số nguyên:
~0 = x_{0} < x_{1} < x_{2} < ... < x_{k-1} < x_k = n~
Trong đó đoạn thứ ~j~ gồm các học sinh vị trí từ ~x_{j - 1} + 1~ đến ~x_j~.
Yêu cầu
Cho số nguyên ~m~, hãy tìm cách chia học sinh thành một số ít nhất các đoạn liên tiếp sao cho tổng các số trong mỗi đoạn không vượt quá ~m~.
Ví dụ: với ~n = 11,\ m = 5~; dãy học sinh cầm bảng ~= (9, -1, 2, -6, 1, 2, 3, -4, 3, 9, -4)~, thì có thể chia thành ~3~ đoạn con liên tiếp:
~a_{1...5} = (9, -1, 2, -6, 1);\ a_{6...9} = (2, 3, -4, 3);\ a_{10...11} = (9, -4)~
Dữ liệu đầu vào
Gồm hai dòng:
- Dòng thứ nhất chứa hai số nguyên dương ~n, m~ ~(n \le 10^5,\ m \le 10^9)~;
- Dòng thứ hai chứa ~n~ số nguyên ~a_1, a_2, ..., a_n~ ~(|a_i| \le 10^9,\ \forall i \in [1, n])~.
Dữ liệu vào đảm bảo luôn tồn tại cách chia dãy.
Dữ liệu đầu ra
Gồm hai dòng:
- Dòng thứ nhất ghi số đoạn để chia dãy;
- Dòng thứ hai ghi ~k - 1~ số nguyên ~x_1, x_2, ..., x_{k-1}~ của phép chia tương ứng.
Ràng buộc dữ liệu
- Có 50% số test ~n \le 5555~;
- Có 50% số test còn lại ~n \le 10^5~.
Ví dụ
Ví dụ 1
INPUT
11 5
9 -1 2 -6 1 2 3 -4 3 9 -4
OUTPUT
3
5 9
Bình luận