P4735最大のXORと永続トライ木

 

 

 

 

持続可能な最大01trie同様のアイデアの会長が、木は貧しいバージョンとして使用されていないだけで、左にポイントを維持する必要があります

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define担当者(I、B)(I =(A)がINT;方には<=(B); iが++)
 の#define repp(I、B)(I =(A)がINTのために、I> = (B); - I)
 の#defineは長い長いっ
 の#defineは(X)(CERR <<(#X)<< '=' <<(X)<< ENDL)を参照
 の#define INF 0x3f3f3f3f
 の#define CLR( 、V)のmemset(A、V、はsizeof A)
 ///////////////////////////////// / 
CONST  INT N = 2E6 + 10 int型 T [Nが<< 5 ] [ 2 ]、Lmaxの[N << 5 ]、NCNT、N、M、X、Y、Z、T [N]、S [N]。
チャー SS [ 2 ]。
アップノード(int型 K、int型 I、INTプリ、int型のPOS)
{ 
    もし(K < 0){Lmaxの[POS] = I。返す;}
     ブール C =(S [I] >> K)&1 もし(PRE)T [POS] [C ^ 1 ] = tの[事前] [C ^ 1 ]。
    T [POS] [C] = ++ NCNT。
    アップノード(k - 1 、I、T [事前] [C]、T [POS] [C])。
    LMAX [POS] = MAX(LMAX [T [POS] [ 0 ]、LMAX [T [POS] [ 1 ])。
} 
INT Qmaxの(INT K、INTヴァル、int型の L、int型のPOS)
{ 
    もし(K < 0戻りヴァル^ S [Lmaxの[POS]。
    ブール C =(ヴァル>> K)&1 もし(Lmaxと[T [POS] [C ^ 1 ]]> = 1)戻り Qmaxの(K- 1、ヴァル、L、T [POS] [C ^ 1 ])。
     戻り Qmaxの(K- 1 、ヴァル、L、T [POS] [C])。
} 
int型のmain()
{ 
    scanf関数(" %D%dの"、&​​N、&M); Lmaxを[ 0 ] = - 1 
    T [ 0] = ++ NCNT、アップノード(2300、T [ 0 ])。
    担当者(I、1 、N)
    { 
        int型のX; scanf関数(" %のD "、&x)は、
        S [i]は = sの[I- 1 ] ^ X。
        T [I] = ++ NCNT。
        アップノード(23、I、T [I- 1 ]、T [I])。
    } int型のL、R。
    一方、(M-- 
    { 
        scanf関数(" %sの" 、SS)。
        もし(SS [ 0] == ' A ' 
        {     
            int型のX; scanf関数(" %のD "、&​​x)は、N ++; S [N] = sで[N- 1 ] ^ X。
            T [N] = ++ NCNT、アップノード(23、N、T [N- 1 ]、T [N])。
        } 
         
        { 
            scanf関数(" %D%D%D "、&​​L&R&X)。
            INTヴァル= X ^ S [N]。
            printf(" %d個の\ n "、Qmaxと(23、ヴァル、1- 1、T [R- 1 ]))。
        }
    }
    リターン 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/bxd123/p/11512157.html