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
Bài toán là mở rộng tự nhiên của kỹ thuật prefix sum (tổng tiền tố) từ một chiều và hai chiều lên ba chiều. Với mỗi truy vấn ta cần tính tổng các phần tử trong một hộp chữ nhật. Nếu duyệt trực tiếp thì độ phức tạp là , có thể lên tới phép cộng — không đạt yêu cầu.
Ta tiền xử lý mảng tổng tiền tố 3 chiều rồi mỗi truy vấn chỉ cần .
Nhận xét quan trọng
- Định nghĩa là tổng của tất cả với , , (quy ước nếu một chỉ số là ).
- Theo nguyên lý bao hàm – loại trừ trong không gian 3 chiều, hộp có thể được phân tích qua các hộp con trừ phần giao nhau ba mặt.
- Bộ nhớ: vì , ta dùng một mảng phẳng 1 chiều với chỉ số để tiết kiệm cấp phát.
Thuật toán
Xây dựng . Khởi tạo là mảng giá trị , sau đó với mọi , , :
Trả lời truy vấn. Với truy vấn :
Quy luật dấu: với là số chỉ số bị giảm xuống (tức dùng , , hoặc ), hệ số là . Tổng cộng có số hạng.
Lưu ý cài đặt.
- Dùng
long longvì tổng có thể đạt . - Đọc/xuất I/O nhanh (
scanf/printfhoặcsys.stdin.readcho Python). - Mảng phẳng 1 chiều giúp truy cập cache thân thiện và tránh nhiều lần cấp phát.
Độ phức tạp
- Thời gian: .
- Bộ nhớ: .
Bình luận