Submission #1203975

#TimeUsernameProblemLanguageResultExecution timeMemory
1203975ezzzayKlasika (COCI20_klasika)C++20
33 / 110
228 ms27428 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...