Giải thích: Tổng ban đầu là 16. Sau ba cập nhật đầu, dãy là [2,−2,6,4] nên tổng bằng 10; hạ hai vị trí cuối theo ngưỡng 3 làm tổng đoạn [1,4) bằng −2+3+3=4.
Lời giải tóm tắt
Mô hình: Hỗ trợ đồng thời chmin, chmax, cộng và truy vấn tổng trên các đoạn nửa mở.
Thuật toán: Mỗi nút lưu hai cực trị đầu, số lượng của chúng, tổng và lazy add. Chmin/chmax chỉ sửa nhóm cực trị khi ngưỡng vượt qua đúng một lớp giá trị.
Thuật toán: Các truy vấn đọc kết quả từ các thống kê đã được duy trì. Mọi thao tác lazy đều được đẩy xuống trước khi tách nút, rồi nút cha được ghép lại từ hai con.
Tính đúng đắn: Ta chứng minh bằng quy nạp theo cây. Ở lá, giá trị lưu chính là giá trị hiện tại của phần tử. Ở một nút trong, điều kiện áp dụng nhanh chỉ được dùng khi thống kê của nút chứng minh rằng mọi phần tử chịu cùng một biến đổi; vì vậy cập nhật các trường tổng hợp là chính xác. Nếu điều kiện đó không đúng, thuật toán đẩy tag, xử lý hai con và ghép lại, nên giả thiết quy nạp cho kết quả đúng. Các nhánh bị bỏ qua đều nằm ngoài đoạn hoặc đã được chứng minh là bất biến. Do đó mọi cập nhật và truy vấn đều đúng theo contract.
Độ phức tạp: Amortized O((n+q) log n); bộ nhớ O(n).