Khôi phục mảng của Levko
Đề bài
Mô tả
Levko có một mảng số nguyên nhưng đã làm mất nó. May mắn là Levko còn giữ lại bản ghi của tất cả các thao tác đã thực hiện trên mảng, theo đúng thứ tự. Mỗi thao tác thuộc một trong hai loại:
- Cập nhật: cho ba số , tăng tất cả các phần tử từ vị trí đến thêm , tức là với mọi .
- Truy vấn: cho ba số , giá trị lớn nhất trong đoạn từ đến (tại thời điểm đó) đúng bằng , tức là .
Cho bản ghi các thao tác, hãy khôi phục một mảng bất kỳ sao cho kết quả của mọi thao tác loại 2 khớp đúng với bản ghi. Levko nhớ rằng mọi phần tử của mảng ban đầu có giá trị tuyệt đối không vượt quá , nên mảng bạn đưa ra cũng phải thỏa .
Nếu không tồn tại mảng nào thỏa mãn, hãy báo không có lời giải. Nếu có nhiều mảng hợp lệ, in ra bất kỳ mảng nào.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và là kích thước mảng và số thao tác.
- dòng tiếp theo, dòng thứ mô tả thao tác thứ . Số nguyên đầu tiên là loại thao tác :
- Nếu : theo sau là .
- Nếu : theo sau là .
Các thao tác được cho theo đúng thứ tự Levko đã thực hiện.
Dữ liệu ra
- Nếu tồn tại lời giải, in ra YES ở dòng đầu, dòng thứ hai in số nguyên (với ).
- Nếu không tồn tại, in ra NO.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 5 1 2 3 1 2 1 2 8 2 3 4 7 1 1 3 3 2 3 4 8 |
YES 8 7 4 7 |
Với mảng : truy vấn 2 hỏi max của ; truy vấn 3 hỏi max của ; sau khi cộng 3 vào mảng thành , truy vấn 5 hỏi max của ... đều khớp. Bất kỳ mảng hợp lệ khác cũng được chấp nhận. |
| 4 5 1 2 3 1 2 1 2 8 2 3 4 7 1 1 3 3 2 3 4 13 |
NO | Không có mảng nào đồng thời cho max của bằng 7 (trước khi cộng) rồi lại bằng 13 (sau khi cộng 3 vào ), vì sau thao tác cộng max chỉ có thể tăng đúng 3 đơn vị. |
Bình luận