canuc80k4500·1/20

Tổng Trên Lưới

Nộp bài trên LQDOJ

Bài 45 · 2D Fenwick Tree

Một bảng vuông kích thước lưu số thiết bị đang hoạt động tại từng ô. Ban đầu mọi ô đều bằng . Bạn phải xử lý các lệnh cộng vào một ô và hỏi tổng trên một hình chữ nhật đóng; tọa độ hàng và cột đều bắt đầu từ .

Input

  • Lệnh đầu tiên có dạng để khởi tạo bảng.
  • Sau đó là các lệnh hoặc lệnh kết thúc .
  • Lệnh cộng vào ô . Lệnh hỏi tổng các ô có và .

Output

  • Với mỗi lệnh loại , in tổng cần tìm trên một dòng.

Constraints

  • .
  • Tổng số lệnh, kể cả lệnh khởi tạo và kết thúc, nằm trong .
  • .
  • ; sau mỗi cập nhật, giá trị của ô thuộc .
  • Tổng trên toàn bảng không vượt quá .

Scoring

  • Subtask ( số điểm): và có không quá lệnh.
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

0 4
1 0 0 5
1 2 3 7
2 0 0 2 3
1 0 0 -2
2 0 0 0 0
3

Output

12
3

Giải thích: Hai lần cộng đầu tạo tổng trong hình chữ nhật đầu tiên. Sau khi giảm ô đi , ô ấy còn , nên truy vấn cuối in .

Lời giải tóm tắt
  • Ý tưởng: Dịch tọa độ đầu vào lên 1 để dùng Fenwick. bit[i][j] lưu tổng của hình chữ nhật có góc phải dưới (i,j) và kích thước theo hai lowbit. Cập nhật điểm (x,y) đi qua mọi nút ngoài chứa hàng x; trong mỗi nút ngoài, tiếp tục đi qua mọi nút trong chứa cột y.
  • Ý tưởng: Đặt P(x,y) là tổng trên [1..x] × [1..y]. Tổng hình chữ nhật [x1..x2] × [y1..y2] bằng P(x2,y2)-P(x1-1,y2)-P(x2,y1-1)+P(x1-1,y1-1).
  • Chứng minh: Bổ đề cập nhật. Với từng trục, dãy chỉ số i, i+lowbit(i), ... chính xác là các nút Fenwick có đoạn quản lý chứa tọa độ cập nhật. Tích Descartes của hai dãy vì thế là đúng toàn bộ nút 2D chứa điểm và không có nút thừa.
  • Chứng minh: Bổ đề prefix. Hai vòng giảm lowbit phân hoạch [1..x] × [1..y] thành các hình chữ nhật Fenwick rời nhau, nên tổng các nút bằng đúng P(x,y).
  • Chứng minh: Định lý. Inclusion-exclusion giữ lại mỗi ô trong hình chữ nhật truy vấn đúng một lần. Kết hợp hai bổ đề, mọi câu trả lời là chính xác sau mọi chuỗi cập nhật.
  • Độ phức tạp: Mỗi cập nhật và truy vấn: O(log²S); bộ nhớ O(S²).
  • Lưu ý cài đặt: Quên dịch chỉ số 0 → 1; dùng int khi cộng tổng lớn; đảo thứ tự bốn prefix; không xử lý cập nhật âm.