例題於是他錯誤的點名開始了
#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樹中包含的單詞有abc
、abd
、abcd
、b
、bcd
、efg
和hij
。可以看到,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樹,如下圖 其中,紅色節點為乙個字串的結尾。對於任意節點,從根節點到該節...