Submission #1033811

#TimeUsernameProblemLanguageResultExecution timeMemory
1033811doducanhKlasika (COCI20_klasika)C++14
110 / 110
1811 ms439380 KiB
///breaker
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ii pair<int,int>
#define bit(x,i) ((x>>i)&1)
struct queries
{
    bool type;
    int u,v;
};
const int maxn=2e5+3;
int n;
queries e[maxn];
vector<ii>adj[maxn];
struct node{
    set<int>se;
    node *one,*zero;
    node(){
        zero=one=NULL;
    }
}root;
void add(node *curr,int i,int x,int &pos){
    curr->se.insert(pos);
    if(i<0)return;
    if(!bit(x,i)){
        if(curr->zero==NULL)curr->zero=new node();
        add(curr->zero,i-1,x,pos);
    }
    else{
        if(curr->one==NULL)curr->one=new node();
        add(curr->one,i-1,x,pos);
    }
}
int get(node *curr,int i,int &val,int &l,int &r){
    if(i<0)return 0;
    if(bit(val,i)==0){
        if(curr->one==NULL||(curr->one->se.lower_bound(l)==curr->one->se.upper_bound(r)))return get(curr->zero,i-1,val,l,r);
        else return ((1<<i)+get(curr->one,i-1,val,l,r));
    }
    else{
        if(curr->zero==NULL||(curr->zero->se.lower_bound(l)==curr->zero->se.upper_bound(r)))return get(curr->one,i-1,val,l,r);
        else return ((1<<i)+get(curr->zero,i-1,val,l,r));
    }
}
int cnt=0;
int d[maxn];
int in[maxn],out[maxn];
void dfs(int u,int par)
{
    in[u]=++cnt;
    for(ii a:adj[u]){
        int v=a.fi;
        int w=a.se;
        d[v]=d[u]^w;
        dfs(v,u);
    }
    out[u]=cnt;
}
main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n;
    for(int i=1,j=2;i<=n;i++){
        string s;
        cin>>s;
        cin>>e[i].u>>e[i].v;
        if(s[0]=='A'){
            e[i].type=false;
            adj[e[i].u].push_back({j,e[i].v});
            j++;
        }
        else e[i].type=true;
    }
    d[1]=0;
    dfs(1,0);
    add(&root,30,0,in[1]);
    for(int i=1,j=2;i<=n;i++){
        if(e[i].type==0){
            add(&root,30,d[j],in[j]);
            j++;
        }
        else{
            cout<<get(&root,30,d[e[i].u],in[e[i].v],out[e[i].v])<<"\n";
        }
    }
    return 0;
}

Compilation message (stderr)

klasika.cpp:61:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   61 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...