Giải thích: Sau phép cộng đầu tiên mảng là 15675; phép gán tiếp theo đưa ba phần tử cuối về 2. Các tổng được tính trên đúng trạng thái hiện tại.
Lời giải tóm tắt
Phân tích: Mỗi node lưu tổng đoạn. Lazy state gồm một tag gán tùy chọn và một tag cộng. Phép gán có quyền ưu tiên: khi gán toàn node, tổng trở thành X * độ_dài, tag gán được thay bằng X và tag cộng cũ phải xóa. Khi cộng, tăng tổng; nếu node đang có tag gán thì tăng chính giá trị gán, ngược lại cộng vào tag cộng.
Thuật toán: Xây Segment Tree. Trước khi đi xuống, đẩy tag gán rồi tag cộng sang hai con. Range update áp dụng trực tiếp ở node phủ trọn; range query cộng tổng từ các node giao đoạn.
Chứng minh tính đúng đắn: Các hàm apply_set và apply_add biến tổng node đúng như thao tác trên từng phần tử và lưu một biểu diễn tương đương của chuỗi thao tác chưa đẩy. Quy tắc gán xóa cộng cũ, còn cộng sau gán tăng giá trị gán, nên thứ tự thời gian được bảo toàn. Merge cộng tổng hai đoạn rời nhau. Vì vậy mọi node luôn lưu đúng tổng và query trả đúng tổng đoạn.
Độ phức tạp: Xây O(N), mỗi thao tác O(log N), bộ nhớ O(N).