canuc80k5614·15/20

Hai Đoạn Cùng Đa Tập

Nộp bài trên LQDOJ

Bài 56 · Randomized Algorithms

Cho hai dãy số nguyên dương và , mỗi dãy gồm phần tử. Bạn cần xử lý truy vấn độc lập.

Mỗi truy vấn cho bốn chỉ số l, r, L, R. Hãy xác định liệu có thể sắp xếp lại các phần tử của đoạn để nhận đúng đoạn hay không.

Nói cách khác, câu trả lời là Yes khi hai đoạn có cùng độ dài và mỗi giá trị xuất hiện trong hai đoạn với cùng số lần. Thứ tự ban đầu của các phần tử không quan trọng. Chỉ việc hai đoạn có cùng tổng số học hoặc cùng tập giá trị là chưa đủ nếu số lần xuất hiện của một giá trị nào đó khác nhau.

Input

  • Dòng đầu chứa hai số nguyên và .
  • Dòng thứ hai chứa số nguyên .
  • Dòng thứ ba chứa số nguyên .
  • Mỗi trong dòng tiếp theo chứa bốn số nguyên , mô tả hai đoạn đóng và .

Output

  • Với mỗi truy vấn, in một dòng:
  • in Yes nếu có thể hoán vị đoạn của để nhận đúng đoạn của ;
  • in No trong trường hợp ngược lại.

Constraints

  • .
  • .
  • và trong mọi truy vấn.
  • Mọi giá trị trong input đều là số nguyên.

Scoring

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

Example

Test 1

Input

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

Output

Yes
No
Yes
No
Yes
No

Giải thích: Ở các truy vấn và , hai đoạn tương ứng có cùng số lần xuất hiện của từng giá trị nên có thể sắp xếp để khớp nhau. Truy vấn và có đa tập khác nhau, còn truy vấn dùng hai đoạn có độ dài khác nhau, nên đều nhận kết quả No.

Lời giải tóm tắt
  • Mô hình đa tập: Hoán vị không làm thay đổi số lần xuất hiện của bất kỳ giá trị nào. Vì vậy, hai đoạn có thể khớp nhau khi và chỉ khi:
  • Mô hình đa tập: 1. chúng có cùng độ dài; 2. với mọi giá trị x, số lần x xuất hiện trong hai đoạn bằng nhau.
  • Mô hình đa tập: Vector tần suất có tới N thành phần, nên không thể so sánh trực tiếp trong mỗi truy vấn.
  • Fingerprint ngẫu nhiên: Chọn hai số nguyên tố lớn P_1 và P_2. Với mỗi giá trị x trong 1..N, gán độc lập hai trọng số ngẫu nhiên w_1[x] và w_2[x] trong hai trường modulo. Fingerprint của một đa tập là tổng trọng số của mọi phần tử, tính riêng theo hai modulo.
  • Fingerprint ngẫu nhiên: Lập hai mảng tổng tiền tố cho mỗi dãy. Fingerprint của một đoạn được lấy bằng hiệu hai prefix, nên mỗi truy vấn chỉ tốn thời gian hằng số. Nếu độ dài khác nhau thì trả lời No; nếu độ dài bằng nhau, so sánh cả hai fingerprint.
  • Fingerprint ngẫu nhiên: Nếu hai đa tập bằng nhau thì hai fingerprint chắc chắn bằng nhau. Nếu chúng khác nhau, tồn tại ít nhất một hệ số chênh lệch tần suất khác 0. Vì mỗi hệ số có trị tuyệt đối nhỏ hơn hai modulo, xác suất một phép chiếu ngẫu nhiên bị va chạm không quá nghịch đảo modulo; dùng hai phép chiếu độc lập làm xác suất lỗi xấp xỉ dưới 10^-18 cho mỗi truy vấn.
  • Độ phức tạp: Tiền xử lý tốn O(N), mỗi truy vấn tốn O(1) và bộ nhớ là O(N).