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

2021-09-20 04:18:16 字數 591 閱讀 5576

原題:

題解:觀察一下式子,將a陣列求乙個異或字首和,其實就是s[n]^x^s[p-1]的最大值 p∈[l,r],就是區間對乙個數的異或的最最大值。假設我們把這個區間放進trie字典樹中,對於乙個x的詢問,可以用貪心的思想,反著走找到最大值。但是確定出給定區間的trie樹,用類似於主席樹的思想,建一顆動態開點的trie樹,詢問時用字首和減掉就行了。洛谷的評測很神奇,不開o2過不了。

#include#define reg register

using namespace std;

const int n=600010;

int ch[n*30][2],cnt[n*30],t[n];

int n,m,s[n],tot;

char str[10];

inline int rd()

void ins(int a,int b,int t,int x)

int query(int a,int b,int t,int x)

int main()

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

}return 0;

}

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 最大異或和 可持久化Trie

給定乙個非負整數序列 初始長度為 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 oplu...