#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2")
#define ff first
#define ss second
#define pb push_back
const int N=1e7+5;
int trie[N][2],cnt=0,fr[N],end[N], vertex=1;
void add(int x){
int node=0;
for(int i=30;i>=0;i--){
bool b=(1<<i) & x;
if(trie[node][b]==0){
trie[node][b]= ++cnt;
}
node=trie[node][b];
fr[node]++;
}
}
int find(int x){
int node=0;
int ans=0;
for(int i=30;i>=0;i--){
bool b=(1<<i) & x;
b^=1;
if(trie[node][b] and fr[trie[node][b]]){
ans+= (1<<i);
node=trie[node][b];
}
else{
node=trie[node][b^1];
}
}
return ans;
}
int dst[N];
signed main(){
int q;
cin>>q;
add(0);
while(q--){
string t;
cin>>t;
if(t=="Add"){
int x,y;
cin>>x>>y;
dst[++vertex]=dst[x]^y;
add(dst[vertex]);
}
else{
int a,b;
cin>>a>>b;
cout<<find(dst[a])<<endl;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |