P4735 最大異或和 可持久化Trie

2022-06-06 19:39:09 字數 737 閱讀 4488

給定乙個非負整數序列 \(\\),初始長度為 \(n\)。

有 \(m\) 個操作,有以下兩種操作型別:

a x:新增操作,表示在序列末尾新增乙個數 \(x\),序列的長度 \(n+1\)。

q l r x:詢問操作,你需要找到乙個位置 \(p\),滿足 \(l \le p \le r\),使得: $

a[p] \oplus a[p+1] \oplus ... \oplus a[n] \oplus x$ 最大,輸出最大是多少。

即求 \(s[p-1] \oplus (sum \oplus x)\) 的最大值,很容易想到可持久化 0-1 trie

有點卡常

#include using namespace std;

const int n = 15000005;

const int lgn = 23;

int ind;

int ch[n][2],siz[n],head[n];

int n,m,a[n],s[n],t1,t2,t3,sum;

char op[3];

void insert(int x)

else

}return ans;

}signed main()

sum=s[n];

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

else

}}

P4735 最大異或和 可持久化Trie

n nn個數字,有操作 在末尾加入乙個數字x xx詢問 l,r l,r l,r 範圍內的乙個p pp使得ap ap 1 ap 2.an xa p oplus a oplus a oplus a oplus x ap ap 1 ap 2 an x的值最大。定義si s isi 表示字首異或和,那麼其實...

P4735 最大異或和(可持久化 trie)

設 sum i 表示前 i 個數的異或和,轉換那個式子為 sum n operatorname x operatorname sum i,i in l 1,r 1 其中的 sum n operatorname x operatorname 是個定值,也就是找乙個 i 使得這個式子最大 由於這是異或運...

P4735 最大異或和 01可持久化Trie樹模板

原題 題解 觀察一下式子,將a陣列求乙個異或字首和,其實就是s n x s p 1 的最大值 p l,r 就是區間對乙個數的異或的最最大值。假設我們把這個區間放進trie字典樹中,對於乙個x的詢問,可以用貪心的思想,反著走找到最大值。但是確定出給定區間的trie樹,用類似於主席樹的思想,建一顆動態開...