Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng tiếp cận
Đây là phiên bản 2D của kỹ thuật mảng hiệu. Mỗi thao tác cập nhật hình chữ nhật được mã hóa bằng bốn dấu chấm trên mảng hiệu , sau đó lấy tổng tiền tố 2D một lần duy nhất là khôi phục được ma trận .
Nhận xét quan trọng
- Nếu cộng trực tiếp lên mọi ô của hình chữ nhật thì chi phí mỗi thao tác là , tổng chi phí lên tới — không thể chấp nhận.
- Với mảng hiệu 1D, để cộng trên đoạn ta làm và . Mở rộng lên 2D, để cộng trên hình chữ nhật ta dùng nguyên lý bao hàm – loại trừ trên bốn góc.
- Toàn bộ giá trị có thể đạt cỡ , phải dùng
long long.
Thuật toán
Dựng mảng khởi tạo bằng . Với mỗi thao tác :
Sau đó dựng tổng tiền tố 2D ngay trên (in-place): với , ,
Khi đó . Trả lời mỗi truy vấn điểm trong .
Độ phức tạp
- Thời gian: .
- Bộ nhớ: cho mảng hiệu / tổng tiền tố.
Bình luận