Persistent Trie
Giới thiệu
Phương pháp Trie bền vững tương tự như Cây phân đoạn bền vững, tức là mỗi lần chỉ sửa đổi các nút được thêm hoặc giá trị bị thay đổi, trong khi giữ lại các nút không thay đổi, nối các cạnh dựa trên phiên bản trước đó, sao cho cuối cùng mỗi phiên bản của Trie gốc đều hoàn chỉnh và chứa đầy đủ thông tin.
Trong hầu hết các bài toán Trie bền vững, Trie xuất hiện dưới dạng 01-Trie.
Ví dụ Maximum XOR Sum
Cho một mảng \(a\) có độ dài \(n\), thực hiện các thao tác sau:
- Thêm một số \(x\) vào cuối mảng, độ dài mảng \(n\) tăng thêm \(1\).
- Cho khoảng truy vấn \([l,r]\) và một giá trị \(k\), tìm giá trị lớn nhất của \(k \oplus \bigoplus^{n}_{i=p} a_i\) với \(l\le p\le r\).
Quá trình
Giá trị cần tìm có vẻ hơi phức tạp, sử dụng phương pháp xử lý XOR liên tiếp thường dùng, ký hiệu \(s_x=\bigoplus_{i=1}^x a_i\), thì biểu thức ban đầu tương đương với \(s_{p-1}\oplus s_n\oplus k\). Nhận thấy rằng \(s_n \oplus k\) là cố định trong quá trình truy vấn, bài toán truy vấn chuyển thành tìm giá trị lớn nhất khi XOR với một giá trị cố định (\(s_n\oplus k\)) trong khoảng \([l-1,r-1]\).
Tiếp tục theo ý tưởng tương tự như Cây phân đoạn bền vững, hãy xem xét mỗi lần truy vấn là truy vấn trên toàn bộ khoảng. Chúng ta chỉ cần xây dựng một Trie cho khoảng này, thêm mỗi số trong khoảng này vào Trie, khi truy vấn thì cố gắng nhảy đến nhánh có bit khác với bit hiện tại.
Để truy vấn khoảng, chỉ cần sử dụng ý tưởng tổng tiền tố và hiệu, dùng hai cây Trie tiền tố (tức là hai phiên bản lịch sử thêm số theo thứ tự) trừ đi nhau để có được cây Trie của khoảng đó. Sử dụng ý tưởng cấp phát động, không thêm các điểm chưa tính toán để giảm dung lượng bộ nhớ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply