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

2021-09-27 02:42:28 字數 928 閱讀 9436

題意:轉化後的題意是有一種操作+一種詢問:

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 表示字首異或和,那麼其實...