原題:
題解:觀察一下式子,將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...