canuc80k2209·10/50

Độ Chênh Trên Ô Vuông

Nộp bài trên LQDOJ

Bài 22 · Sparse Table

Cho ma trận vuông và một kích thước cố định . Mỗi truy vấn cho hai chỉ số x, y, là hàng và cột của góc trên bên trái của một hình vuông con .

Với từng truy vấn, hãy in hiệu giữa giá trị lớn nhất và giá trị nhỏ nhất trong hình vuông con đó.

Input

  • Dòng đầu chứa ba số nguyên và .
  • dòng tiếp theo, mỗi dòng chứa số nguyên mô tả một hàng của ma trận.
  • Mỗi dòng trong dòng cuối chứa hai số nguyên và .

Output

  • Với mỗi truy vấn, in độ chênh giữa giá trị lớn nhất và nhỏ nhất trong hình vuông tương ứng trên một dòng.

Constraints

  • .
  • .
  • .
  • Mỗi phần tử của ma trận nằm trong đoạn .
  • trong mọi truy vấn.

Scoring

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

Example

Test 1

Input

4 2 4
1 5 2 4
7 3 6 0
8 9 1 2
4 6 5 3
1 1
1 3
2 2
3 3

Output

6
6
8
4

Giải thích: Hình vuông tại chứa các giá trị , nên độ chênh là . Ba truy vấn còn lại cho độ chênh lần lượt là và .

Lời giải tóm tắt
  • Phân tích: Với một hình vuông cạnh b, chọn p là lũy thừa hai lớn nhất không vượt b. Vì 2p ≥ b, bốn hình vuông p × p đặt tại bốn góc phủ toàn bộ vùng truy vấn. Phần giao nhau không ảnh hưởng đến phép lấy minimum hoặc maximum.
  • Thuật toán: Xây hai Sparse Table hai chiều chuyên cho hình vuông: lớp k lưu minimum và maximum của mọi hình vuông cạnh 2^k. Mỗi ô lớp mới được gộp từ bốn hình vuông ở lớp trước. Với một truy vấn, lấy bốn ô lớp floor(log2 b) ở bốn góc, gộp minimum và maximum rồi in hiệu.
  • Chứng minh tính đúng đắn: Quy nạp theo k cho thấy mỗi ô Sparse Table lưu đúng thống kê của hình vuông mà nó đại diện. Bốn khối được chọn phủ mọi ô của hình vuông truy vấn, nên minimum và maximum khi gộp lần lượt là hai cực trị thật. Hiệu của chúng chính là đáp án cần in.
  • Độ phức tạp: Tiền xử lý tốn O(n^2 log n) thời gian và bộ nhớ; mỗi truy vấn mất O(1).