Mỗi test bắt đầu với một ma trận nhị phân n×n toàn số 0. Một lệnh có thể lật mọi bit trong một hình chữ nhật đóng; một lệnh khác hỏi bit hiện tại tại đúng một ô.
Input
Dòng đầu chứa số test T.
Mỗi test bắt đầu bằng nq, sau đó là q lệnh.
Cx1y1x2y2 lật hình chữ nhật; Qxy hỏi một ô.
Output
In bit cho từng lệnh Q. Sau phần kết quả của hai test liên tiếp có đúng một dòng trống.
Constraints
1≤T≤10.
2≤n≤1000,1≤q≤5⋅104.
1≤x1≤x2≤n,1≤y1≤y2≤n; tọa độ truy vấn cũng nằm trong bảng.
Scoring
Subtask 1 (50% số điểm): Trong mỗi test, n,q≤100.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
2
3 3
C 1 1 2 2
Q 1 1
Q 3 3
2 2
C 1 2 2 2
Q 2 2
Output
1
0
1
Giải thích: Ở test đầu, hình vuông 2×2 góc trên trái bị lật nên (1,1)=1, còn (3,3)=0. Ở test thứ hai, cột 2 bị lật và ô (2,2) nhận giá trị 1.
Lời giải tóm tắt
Ý tưởng: Xem D là mảng hiệu 2D theo XOR. Muốn XOR 1 lên [x1..x2]×[y1..y2], XOR 1 tại bốn góc hiệu (x1,y1), (x1,y2+1), (x2+1,y1), (x2+1,y2+1). Giá trị thật tại (x,y) là XOR prefix của D tới (x,y). Dùng Fenwick 2D với phép gộp XOR thay cho cộng.
Chứng minh: Một góc hiệu bắt đầu hoặc kết thúc ảnh hưởng theo từng trục. Với một ô trong hình chữ nhật, đúng một tổ hợp góc còn hiệu lực nên nhận XOR 1; ngoài hình chữ nhật, số góc còn hiệu lực là chẵn nên triệt tiêu. Fenwick trả đúng XOR prefix của D, do đó query điểm đúng.
Độ phức tạp: Update hình chữ nhật và query điểm đều O(log²n); nhớ O(n²).
Lưu ý cài đặt: Cập nhật góc x2+1/y2+1 chỉ khi còn trong bảng; dùng cộng thay XOR; quên dòng trống giữa test.