canuc80k6003·4/15

Tổng Trên Bảng Động

Nộp bài trên LQDOJ

Bài 60 · CDQ Divide and Conquer

Description

Một bảng vuông ban đầu chứa toàn số , các hàng và cột được đánh số từ đến . Bạn nhận một chuỗi lệnh theo thời gian: lệnh loại cộng một giá trị vào một ô; lệnh loại hỏi tổng hiện tại trên một hình chữ nhật đóng; lệnh kết thúc dữ liệu.

Input

  • Dòng đầu là lệnh và kích thước .
  • Các dòng sau là lệnh cập nhật , truy vấn hoặc lệnh kết thúc .

Output

  • Với mỗi truy vấn loại , in tổng hiện tại trong hình chữ nhật đóng.

Constraints

  • .
  • Có không quá cập nhật và truy vấn.
  • ; và .
  • ; mọi kết quả nằm trong số nguyên bit có dấu.

Scoring

  • Subtask ( số điểm): dữ liệu nhỏ theo giới hạn được công bố trong hệ thống chấm.
  • Subtask ( số điểm): không có giới hạn bổ sung.

Example

Test 1

Input

0 5
1 2 2 3
1 4 3 5
2 1 1 3 3
1 3 3 2
2 2 2 4 3
3

Output

3
10

Giải thích: Truy vấn đầu chỉ chứa cập nhật tại . Sau khi cộng thêm tại , hình chữ nhật thứ hai chứa cả ba cập nhật nên có tổng .

Lời giải tóm tắt
  • Mô hình và thuật toán: Tách mỗi truy vấn hình chữ nhật thành bốn truy vấn tổng tiền tố bằng bao hàm-loại trừ. CDQ theo thời gian chỉ cho cập nhật ở nửa trái ảnh hưởng truy vấn ở nửa phải; khi ghép, quét x và dùng Fenwick trên y.
  • Chứng minh tính đúng đắn: Mỗi quan hệ “cập nhật xảy ra trước truy vấn” được xử lý đúng tại nút CDQ thấp nhất tách hai sự kiện. Quét theo x và Fenwick tiền tố y giữ đúng hai điều kiện tọa độ; bốn hệ số bao hàm-loại trừ khôi phục chính xác tổng hình chữ nhật.
  • Độ phức tạp: Với E = số cập nhật + 4·số truy vấn, thời gian O(E log² E) và bộ nhớ O(E+w).
  • Lỗi thường gặp: Một lỗi tự nhiên là trả tổng của toàn bộ bảng cho mọi truy vấn và bỏ qua biên hình chữ nhật.