HDU6059(01字典樹求異或最大值)

2021-08-04 23:47:28 字數 1012 閱讀 6007

題意

:求a中

三個數a

i,aj

,ak,

ai⊕a

j⊕ak(

i<

j這裡要動態維護字典樹,每當輸入乙個數,就更新一下字典樹。最後減去i>j的情況(這裡最難懂),搞了好久,算是會了,手撕**時問題百出,還是沒有學到骨子裡,留下以後在複習。

參看了兩位大佬的部落格:

大佬部落格

小老部落格

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define ll long long

#define mem(a) memset(a,0,sizeof(a))

const

int eps=1e-8;

const

int maxn=5e7+5;//須填寫

const

int inf=0x3f3f3f3f;

struct node

}l[maxn];

int tot;

ll ans,cnt[32][2];

void add(int a,int len)

if(l[now].nxt[tmp^1]!=-1)//如果和k本位不同的數則進行計算

l[now].sum[tmp]+=cnt[i][tmp]-l[l[now].nxt[tmp]].v;//把此處的k當做i處理,尋找不符合要求的j,並記錄留用

cnt[i][tmp]++;

now=l[now].nxt[tmp];

l[now].v++;

}}int a[500010];

int b[40];

int main()

add(b,30);

}cout

0;}

初試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 在查詢最大異或值時我...

奶牛異或(01字典樹)

題意 讓你找乙個連續區間異或和最大,如果有相同的,則輸出斷點較小的。題解 01字典樹,利用字首和的思想進行求解,我們在插入字首的同時,也在不斷的更新最大值。我們查詢當前 二進位制字串與已經插入的 二進位制字串中的哪乙個異或和最大?找到最大的那個,讀取這個字首和是到誰結束的,來判斷是否要更新 keep...

字典樹 求異或的值最大

zeus 和 prometheus 做了乙個遊戲,prometheus 給 zeus 乙個集合,集合中包含了n個正整數,隨後 prometheus 將向 zeus 發起m次詢問,每次詢問中包含乙個正整數 s 之後 zeus 需要在集合當中找出乙個正整數 k 使得 k 與 s 的異或結果最大。prom...