題意:轉化後的題意是有一種操作+一種詢問:
1. 操作:在序列末尾插入乙個數
2. 詢問:給定l,r
,x
l,r,x
l,r,
x,求區間l,r
l,rl,
r中與x
xx異或能得到的最大異或值**化後的題意)
思路:題意都被轉化成這樣了。。。應該就沒啥難度了
用類似主席樹的方式構建可持久化01tr
ie
01trie
01trie
然後還是簡單的貪心跑01tr
ie
01trie
01trie
最後小心給定的l,r
l,rl,
r都等於1
11的情況,特判一下即可(還沒有想好如何不特判)
#include "bits/stdc++.h"
#define hhh printf("hhh\n")
#define see(x) (cerr<<(#x)<<'='<<(x)inline int read()
const int maxn = 6e5+10;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const double eps = 1e-7;
int n, m;
int root[maxn], son[maxn<<5][2], sz[maxn<<5], tot;
void insert(int p, int i, int pre, int &now)
int query(int x, int y, int p, int i)
int main()
}}
01Trie 可持久化01Trie學習筆記
之前一直不把trie當回事,直到今天看了篇部落格,據說01trie可以當平衡樹使?然後就學了學,發現和權值線段樹也沒什麼區別 01trie 權值線段樹的本質是一棵01trie 01trie就是把數字的二進位制位從高到低當做字串扔進trie裡 巨佬一眼就能看出,把最高位是0的當做左兒子,最高位是1的當...
P4735 最大異或和 01可持久化Trie樹模板
原題 題解 觀察一下式子,將a陣列求乙個異或字首和,其實就是s n x s p 1 的最大值 p l,r 就是區間對乙個數的異或的最最大值。假設我們把這個區間放進trie字典樹中,對於乙個x的詢問,可以用貪心的思想,反著走找到最大值。但是確定出給定區間的trie樹,用類似於主席樹的思想,建一顆動態開...
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 表示字首異或和,那麼其實...