給定乙個非負整數序列 \(\\),初始長度為 \(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樹,用類似於主席樹的思想,建一顆動態開...