trie樹及其可持久化操作學習筆記

2022-06-02 03:12:07 字數 2744 閱讀 4567

例題於是他錯誤的點名開始了

#include #include #include using namespace std;

struct node

trie[500009];

int siz = 1;

inline void insert(char* str)

trie[t].wrd = true;

}inline int search(char* str)

if(trie[t].wrd)

else return 0;

}int n, m;

char str[55];

int main()

scanf("%d", &m);

for(int i = 0; i < m; i++)

return 0;

}

大概沒有

如上圖,這就是一棵trie樹。這個trie樹中包含的單詞有abcabdabcdbbcdefghij。可以看到,trie的字母並不存在結點上,而是存在邊上。每個結點的兒子表示以這個結點對應的字首的字串的延續。結點的標記代表字串的終止。這就是一棵trie樹的結構。

從節點開始逐字元下跳, 直到沒有對應的字元出現或在無結束標記情況下終止,代表查詢失敗

反之一直有對應字元並且在有標記情況下結束代表查詢成功

和查詢相同的下跳,如果出現了沒有的字元就建立新節點,並在結束時打上結束標記

乙個結構體儲存資訊, wrd表示結束標記,siz表示當前節點數

struct node

trie[500009];

int siz = 1;

vis可以判斷是否找過

inline int search(char* str)

if(trie[t].wrd)

else return 0;

}

inline void insert(char* str)

trie[t].wrd = true;

}

然後就沒了

11.4更新

可持久化字典樹就是記錄在字典樹上有相同字首的字首和(節點的個數),然後通過取差值(右邊界減去左邊界)判斷一段區間內是否有字典樹上的字首

類似於主席樹(畢竟都是可持久化操作)

求異或的最大值可以用01-trie樹解決(用相同的深度存樹,查詢時從最高位貪心)

因此區間求異或最大值我們一般選擇可持久化01-trie樹

概述:求區間異或最大值

顯然直接暴力不能a,考慮可持久化tire樹

插入

void insert(ll x, ll t, ll &z) 

}

查詢
ll search(ll l, ll r, ll x) 

else

} return ans;

}

**
#include #include #include #define ll long long

ll n, q;

struct node

}trie[200000 * 40];

ll siz, root[600000];

void init()

void insert(ll x, ll t, ll &z)

}ll search(ll l, ll r, ll x)

else

} return ans;

}int main()

for(ll j = 1; j <= q; j++)

return 0;

}

最大異或和

異或有可減性,因此可以求出字首異或和,以此構建trie樹

(本題luogu需要玄學卡常,也可能是我trie樹常熟實在太大)

#include #include #include const int maxn = 600000;

using namespace std;

int n, q, root[maxn * 23 + 200000], siz, ret[maxn + 7];//陣列範圍再開大會t

struct node

}trie[maxn * 23 + 300000];

inline void init()

inline void insert(int x, int t, int &z)

}inline int search(int l, int r, int x)

else

} return ans;

}int main()

int h = n + 1;

for(register int i = 1; i <= q; i++)

else

}}

可持久化trie樹

腦補出來的乙個東西,不知道別人是怎麼實現的 自己也還沒有用寫的 交過題 不過把想法和大佬說了,應該是正確的。乙個數列,每次查詢 l,r 內的數中取乙個數和給定值xor後的最大值。如果沒有區間限制,那麼直接將所有數都插入trie樹就可以了,但是這裡需要指定區間的,所以不能直接處理。因此對於trie樹上...

Trie樹 可持久化

made by xiper updata time 2015 12 8 test status 使用前呼叫初始化函式 init 同時 root 0 0 struct trie persistent tree triesize 獲取字符集雜湊編號 必須在 0 lettersize 之內 inline ...

Trie 可持久化Trie

warning 以下 未經測試,若發現錯誤,歡迎指出qwq 一種簡單的資料結構,可儲存大量字串,可在 o len 的時間內完成插入,刪除,查詢等操作。下面是乙個簡單的例子,對於abc,abd,abcd,bcd這四個字串建trie樹,如下圖 其中,紅色節點為乙個字串的結尾。對於任意節點,從根節點到該節...