VOI 16 Bài 6 - Đốn Cây

Xem dạng PDF

Gửi bài giải

Điểm: 1,50 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Nguồn bài:
VOI 2016 bài 6
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Hùng đang làm việc trong Công ty cao su ~X~. Công ty có rừng cao su rất rộng, với những hàng cây cao su trồng cách đều thẳng tắp. Theo định kỳ, người ta thường phải chặt hạ cả hàng cây cao su đã hết hạn khai thác để trồng thay thế bằng hàng cây mới.

Hùng phát hiện ra một bài toán tin học liên quan đến vấn đề này: Một nhóm công nhân được giao nhiệm vụ chặt hạ hàng cây gồm ~n~ cây được trồng dọc theo một đường thẳng với khoảng cách cố định giữa hai cây liên tiếp. Nếu các công nhân cưa đổ một cây, họ có thể cho nó đổ về phía bên trái hoặc bên phải dọc theo hàng cây. Một cây khi đổ có thể lật đổ cây khác bị nó rơi vào và có thể làm đổ nhiều cây khác, theo hiệu ứng lan truyền domino. Sau khi khảo sát kỹ, Hùng đã mô tả được hiệu ứng lan truyền domino như sau: Giả sử các cây trên hàng cây được đánh số từ ~1~ đến ~n~, từ trái qua phải và chiều cao của cây ~i~ là ~h_i~ ~(1 \leq i \leq n).~

  • Nếu cây ~i~ đổ về bên trái thì tất cả các cây ~j~ với ~i - h_i < j < i~ cũng sẽ đổ;
  • Nếu cây ~i~ đổ về bên phải thì tất cả các cây ~j~ với ~i < j < i + h_i~ cũng sẽ đổ;
  • Mỗi cây chỉ đổ một lần về bên trái hoặc bên phải.

Do đó bài toán đặt ra đối với Hùng là: Xác định số lượng nhỏ nhất các cây mà các công nhân cần cưa đổ đảm bảo hạ đổ toàn bộ hàng cây.

Yêu cầu: Giúp Hùng giải quyết bài toán đặt ra.

Input

  • Dòng đầu tiên ghi số nguyên dương ~n~;
  • Dòng thứ hai chứa ~n~ số nguyên dương ~h_1, \: h_2, \: \ldots \:, h_n~ được ghi cách nhau bởi dấu cách, mỗi số không vượt quá ~10^6~.

Output

  • Dòng đầu tiên ghi số nguyên dương ~k~ là số lượng cây mà các công nhân cần cưa đổ;
  • Dòng thứ hai ghi dãy số nguyên ~c_1,\: c_2,\: \ldots, \:c_k~ trong đó ~|c_j| \: (1 \leq j \leq k)~ là dãy chỉ số của các cây theo thứ tự các công nhân phải lần lượt cưa đổ, ~c_j~ là số dương nếu cây cần cho đổ về bên phải và là số âm nếu cây cần cho đổ về bên trái. Nếu có nhiều cách thì chỉ cần đưa ra một cách tùy ý.

Giới hạn

  • Có ~40~% số test ứng với ~40~% số điểm của bài có ~1 \leq n \leq 10^4~.
  • Có ~40~% số test khác ứng với ~40~% số điểm của bài có ~1 \leq n \leq 10^5~.
  • Có ~20~% số test còn lại ứng với ~20~% số điểm của bài có ~1 \leq n \leq 4*10^6~.

Sample Input

5
1 2 3 1 1

Sample Output

2
2 -1

Note

Còn một cách đốn cây khác: Cưa hai cây ~1~ và ~2~ và đều cho đổ về bên phải.


Bình luận

Hãy đọc nội quy trước khi bình luận.