Duy trì một đa tập động và đếm bao nhiêu phần tử có XOR với giá trị truy vấn nhỏ hơn một ngưỡng.
Ở truy vấn 3pl, mỗi bản sao x đang có đóng góp 1 khi và chỉ khi (xXORp)<l. Dấu bất đẳng thức là nghiêm ngặt; giá trị bằng l không được tính.
Input
Dòng đầu chứa số nguyên q.
q dòng tiếp theo, mỗi dòng có dạng 1p,2p hoặc 3pl.
Output
Với mỗi truy vấn loại 3, in một dòng chứa số bản sao thỏa điều kiện.
Constraints
1≤q≤105.
1≤p≤108 trong mọi sự kiện.
1≤l≤108 trong truy vấn loại 3.
Đa tập ban đầu rỗng.
Trước mỗi sự kiện 2p luôn có ít nhất một bản sao của p.
Có ít nhất một truy vấn loại 3; truy vấn vẫn hợp lệ khi đa tập đang rỗng.
Các phần tử bằng nhau được đếm theo số bản sao.
Scoring
Subtask 1 (50% số điểm): q≤2000.
Subtask 2 (50% số điểm): Không có giới hạn bổ sung.
Example
Test 1
Input
8
1 5
1 2
1 5
3 4 4
2 5
3 4 4
3 7 3
2 5
Output
2
1
1
Giải thích: Ban đầu hai bản sao 5 đều cho 5XOR4=1<4, còn 2 không thỏa nên kết quả là 2. Sau khi xóa một bản sao 5, hai truy vấn tiếp theo lần lượt có đúng một phần tử thỏa.
Lời giải tóm tắt
Ý tưởng: Dùng Binary Trie có cnt. Chèn/xóa cập nhật đường bit; truy vấn đếm <l từ bit cao: khi l_b=1, cộng toàn bộ nhánh tạo XOR bit 0 rồi tiếp tục ở nhánh tạo bit 1; khi l_b=0 chỉ tiếp tục ở nhánh tạo bit 0.
Tính đúng đắn: Cnt của mỗi nút luôn bằng số bản sao hiện có đi qua nút đó vì thêm và xóa cập nhật đúng một đơn vị trên toàn đường. Trong truy vấn, giả sử các bit XOR cao hơn đang bằng prefix tương ứng của l. Nếu l_b=0, nhánh tạo XOR bit 1 sẽ vượt l nên chỉ nhánh tạo 0 còn hợp lệ. Nếu l_b=1, toàn bộ nhánh tạo 0 đã nhỏ hơn tại bit đầu khác nhau nên được cộng bằng cnt; nhánh tạo 1 vẫn bằng prefix l và phải xét tiếp. Các nhóm được cộng rời nhau và bao phủ đúng mọi giá trị có XOR nhỏ hơn l.
Độ phức tạp: Mỗi sự kiện đi qua 31 mức: O(31q) thời gian và O(31q) bộ nhớ trong trường hợp xấu nhất.
Đối chứng nhỏ: Giữ bảng tần suất; với mỗi truy vấn nhỏ, duyệt mọi giá trị và cộng tần suất nếu (x XOR p) < l. Đây là mô hình độc lập được dùng cho mười test nhỏ.