chip factory(hdu 5536)和xor sum(hdu 4825)一樣都是01字典樹,不過多了乙個刪除操作,hdu4825只有插入操作,而hdu 5536有刪除操作這裡講解一下刪除操作:
定義乙個judge[
]陣列判斷每乙個節點是否存在即可
在插入的時候令judeg[root]+=1
刪除的時候令judge[root]
-=1即可
當judge[root]
<=
0時以該root為字首的這個數不存在
**:void insert_delete(ll x,ll add)
//插入和刪除操作
re_sum[root]
=x;}
題解:
暴力列舉 a[i]+a[j],然後把a[i]和a[j]從tire樹上刪除,後再新增即可c++會wa,g++可以過,原因我也不知道ac**:
#include
#include
#include
using namespace std;
#define ll long long
const ll maxn=
10005
;ll tire[
31*maxn][2
];ll re_sum[
31*maxn]
;ll judge[maxn]
;//判斷節點是否被刪除
ll tot;
//代表總結點數
void insert_delete(ll x,ll add)
//插入和刪除操作
re_sum[root]
=x;}
ll find_num(ll x)
return re_sum[root];}
ll a[maxn]
;int main(
) ll maxx=0;
for(ll i=
1; i<=n; i++)
insert_delete(a[i],1
);} printf(
"%lld\n"
,maxx);}
}
01字典樹 小結
為了做13年南京網路賽的一道題 學了這個01字典樹 看了別人的模板 之後切了幾道水題 現在總結一下 01字典樹的實現可以看成是把乙個數的二進位制字元化後插入到一顆一般的字典樹中 比如在01字典樹種插入3時 相當於在字典樹中插入00 00011 一共33為,這個根據具體實現不同 查詢最大異或值的時候我...
01字典樹 OR問題
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 注意 int型別1 31會溢位 區間異或和的題目 比如給一組...
01字典樹模板
題意 輸入n n次操作 x 插入x x 刪除x x 查詢已經插入的某個數與x異或的最大異或和思路 01字典樹模板題 遇到這題剛好可以更新一下自己的模板 以前的太醜了 ps 這題有個坑點是字典樹為空的情況下可能會查詢,所以開始的時候先插入乙個0 code include using namespace...