canuc80k2514·15/50

Đoạn Con XOR Bằng K

Nộp bài trên LQDOJ

Bài 25 · Mo's Algorithm

Cho dãy và số nguyên . Với mỗi đoạn đóng , hãy đếm số cặp chỉ số thỏa và .

Input

  • Dòng đầu chứa và .
  • Dòng thứ hai chứa số nguyên .
  • Mỗi trong dòng tiếp theo chứa .

Output

  • In số đoạn con hợp lệ của mỗi truy vấn trên một dòng.

Constraints

  • .
  • .
  • .
  • Đáp án vừa kiểu số nguyên bit có dấu.

Scoring

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

Example

Test 1

Input

5 4 3
1 2 3 1 2
1 5
1 3
2 5
4 5

Output

4
2
2
1

Giải thích: Trong , hai đoạn con và có XOR bằng . Trong , toàn đoạn có XOR ; các truy vấn khác được đếm tương tự.

Lời giải tóm tắt
  • Ý tưởng: Lập prefix XOR P; truy vấn [l,r] trở thành đếm cặp prefix trong [l-1,r] có XOR bằng K, rồi dùng Mo với cnt[p xor K].
  • Tính đúng đắn: Sau khi dịch đủ bốn biên, cửa sổ hiện hành đúng bằng miền của truy vấn. Mỗi đoạn con XOR bằng K tương ứng duy nhất với một cặp prefix có XOR bằng K; cập nhật cnt[p xor K] đếm đúng các cặp mới. Trạng thái ban đầu đúng cho cửa sổ rỗng và mọi phép cập nhật đều bảo toàn bất biến, nên đáp án của từng truy vấn là chính xác.
  • Độ phức tạp: Độ phức tạp theo thứ tự Mo là O((n+q)√n) phép dịch biên; bài 12 và 14 tốn thêm hệ số log n cho Fenwick. Bộ nhớ O(n+q).
  • Lỗi thường gặp: Quên đưa prefix P[0] vào cửa sổ bằng cách đổi l thành l-1.
  • Lỗi thường gặp: Không đảo đúng cập nhật khi xóa phần tử.
  • Lỗi thường gặp: Xử lý sai đầu phải của đoạn.