可持久化trie樹
給定乙個非負整數序列,初始長度為n。
有m個操作,有以下兩種操作型別:
a x
:新增操作,表示在序列末尾新增乙個數x,序列的長度n+1。
q l r x
:詢問操作,你需要找到乙個位置p,滿足l≤p≤r,使得:a[p]⊕a[p+1]⊕...⊕a[n]⊕x最大,輸出最大是多少。
solution
異或滿足可減性,所以可以維護字首和
新增操作就方便了
就是詢問操作不太好處理
// luogu-judger-enable-o2
#include using namespace std;
#define maxn 600009
int rt[maxn],cnt[maxn*28];
int ch[maxn*28][2];
int qz[maxn];
int tt=1;
int n,m;
void ins(int a,int b,int t,int x)
int qu(int a,int b,int t,int x)
inline void write(int x)
int getc()
void insert(int x)
size[node]=size[rt]+1;
}void query(int l,int r,int x)
write(ans);
putchar(10);
}int main()
return 0;
}
Trie 可持久化Trie
warning 以下 未經測試,若發現錯誤,歡迎指出qwq 一種簡單的資料結構,可儲存大量字串,可在 o len 的時間內完成插入,刪除,查詢等操作。下面是乙個簡單的例子,對於abc,abd,abcd,bcd這四個字串建trie樹,如下圖 其中,紅色節點為乙個字串的結尾。對於任意節點,從根節點到該節...
可持久化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 ...