題意:
讓你找乙個連續區間異或和最大,如果有相同的,則輸出斷點較小的。
題解:01字典樹,利用字首和的思想進行求解,我們在插入字首的同時,也在不斷的更新最大值。
我們查詢當前 二進位制字串與已經插入的 二進位制字串中的哪乙個異或和最大?
找到最大的那個,讀取這個字首和是到誰結束的,來判斷是否要更新
/*keep on going never give up*/
//#pragma gcc optimize(3,"ofast","inline")
#include
//#define int long long
#define endl '\n'
#define accepted 0
#define ak main()
#define i_can signed
using
namespace std;
const
int maxn =
1e7+10;
const
int maxn =
0x3f3f3f3f
;const
int minn =
0xc0c0c00c
;typedef
long
long ll;
const
int inf=
0x3f3f3f3f
;const ll mod=
1e9+7;
using
namespace std;
int n,total;
int trie[maxn][2
],num[maxn]
;void
ins(
int val,
int x)
node=trie[node]
[t];
} num[node]
=x;}
pair<
int,
int>
quer
(int val)
else node=trie[node]
[t];
}return
make_pair
(res,num[node]);
}signed
main()
} cout<" "<1<<
" "
}
01字典樹 之 求樹上最長異或路徑
題目描述 給定一棵 n 個點的帶權樹,結點下標從 1 開始到 n 尋找樹中找兩個結點,求最長的異或路徑。異或路徑指的是指兩個結點之間唯一路徑上的所有邊權的異或。洛谷 4551 最長異或路徑 思路,首先dfs處理出每個點到 根 的距離 然後將這些距離存在字典樹中,然後對於每個距離查詢字典樹,得到最優值...
COJ 1216 異或最大值 01字典樹
題意 求n個非負數中任意2個的異或值的最大值。n數量級為10 5 分析 直接暴力肯定超時了。乙個非負整數可以看成1個32位的01字串,n個數可以看成n個字串,因此可以建立字典樹,建好樹後,對於任意非負整數x,可以沿著樹根往下貪心找到y,使得x異或y最大,複雜度為樹的深度。view code incl...
初試01字典樹(求異或問題)
題目鏈結 一般01字典樹用來解決區間異或和之類的問題。異或的性質 1.交換律 2.結合律,即 a b c a b c 3.自反性,即x x 0 4.x 0 x 其中運用最多的就是自反性。有上述性質,對於區間異或和要知道如下性質 xor l,r xor 1,l 1 xor 1,r 在查詢最大異或值時我...