Submission #1163426

#TimeUsernameProblemLanguageResultExecution timeMemory
1163426LmaoLmaoKlasika (COCI20_klasika)C++17
0 / 110
560 ms359284 KiB
#include <bits/stdc++.h>
using namespace std;

int d[200005];
int val[6000001];
vector<int> adj[200005];
int trie[6000001][2];
set<int> a[6000001];
int timer = 0;
int kien=1;
int st[200005],ed[200005];
int t = 0;
void elt(int u){
    st[u] = ++t;
    for(int v : adj[u]){
        elt(v);
    }
    ed[u] = t;
}
int get(int x,int l,int r){
    int u = 0;
    for(int i = 30;i >= 0;i--){
       int v = (d[x] >> i)&1;
       if(!v){
          auto it = a[trie[u][1]].lower_bound(l);
          if(it!=a[trie[u][1]].end() && *it <= r){
              u = trie[u][1];
          }else{
              u = trie[u][0];
          }
          if(i==0) cout << *it << endl;
       }else{
          auto it = a[trie[u][0]].lower_bound(l);
            if(it!=a[trie[u][0]].end() &&*it <= r){
              u = trie[u][0];
          }else{
              u = trie[u][1];
          }
       }
    }
    return val[u] ^ d[x];
}
void add(int x){
    int u = 0;
    for(int i = 30;i >= 0;i--){
        int v = (d[x] >> i) & 1;
        if(!trie[u][v]) trie[u][v] = ++timer;
        u = trie[u][v];
        a[u].insert(st[x]);
    }
    //cout << timer << ' ' << val[u] << endl;
    val[u] = d[x];
    
}
int query[200005][3];
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    int q; cin >> q;
    for(int i = 1;i <= q;i++){
        string s; cin >> s;
        int x, b; cin >> x>> b;
        query[i][1] = x;
        query[i][2] = b;
        if (s == "Add"){
            query[i][0] = 0;
            d[++kien]= d[x] ^ b;
            adj[x].push_back(kien);
        }else{
            query[i][0] = 1;
        }
    }
    elt(1);
    kien = 1;
    for(int i = 1;i <= q;i++){
        if(!query[i][0]){
            add(++kien);
        }else{
            cout << get(query[i][1],st[query[i][2]],ed[query[i][2]]) << "\n";
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...