【可持久化Trie】模板

总算找到个能看懂的了,orz Lavender。

#define INF 2147483647
#define N 100001
#define MAXBIT 31
int root[N],ch[N*(MAXBIT+1)][2],sz[N*(MAXBIT+1)],tot;
int query(int L,int R,int W)//询问a[L...R]中W与其的最大异或值
{
    int ans=0;
    L=root[L];R=root[R+1];
    for(int i=MAXBIT;i>=1;--i)
      {
        int Bit=((W>>(i-1)&1)^1);
        if(sz[ch[R][Bit]]-sz[ch[L][Bit]]==0)
          Bit^=1;
        else
          ans+=1<<(i-1);
        R=ch[R][Bit];
        L=ch[L][Bit];
      }
    return ans;
}
void add(int now,int W)//先add(1,0),再add(2...n+1,a[1...n])
{
    int old=root[now-1];
    root[now]=++tot;
    now=root[now];
    for(int i=MAXBIT;i>=1;--i)
      {
        int Bit=((W>>(i-1))&1);
        sz[now]=sz[old]+1;
        ch[now][Bit^1]=ch[old][Bit^1];
        ch[now][Bit]=++tot;
        now=ch[now][Bit];
        old=ch[old][Bit];
      }
    sz[now]=sz[old]+1;
}
原文地址:https://www.cnblogs.com/autsky-jadek/p/4313770.html