Submission #291268

#TimeUsernameProblemLanguageResultExecution timeMemory
291268penguinhackerKlasika (COCI20_klasika)C++17
110 / 110
3059 ms377464 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array //#warning changenodes const int MAXDIG=30, MXNODES=7e6; struct Node { int nxt[2]; set<int> pos; Node() {nxt[0]=nxt[1]=-1;} }; struct Trie { vector<Node> trie; Trie() {trie.reserve(MXNODES); trie.emplace_back();} void add(int x, int p) { int cur=0; for (int i=MAXDIG; ~i; --i) { int c=(x>>i)&1; if (trie[cur].nxt[c]==-1) { trie[cur].nxt[c]=trie.size(); trie.emplace_back(); } cur=trie[cur].nxt[c]; trie[cur].pos.insert(p); } } int qry(int x, int ql, int qr) { //best xor in trie int cur=0; int res=0; for (int i=MAXDIG; ~i; --i) { int c=(x>>i)&1; int chk=trie[cur].nxt[c^1]; bool can=chk!=-1; if (can) { auto it=trie[chk].pos.lower_bound(ql); if (it==trie[chk].pos.end()||*it>qr) can=0; } if (can) { res+=(1<<i); cur=chk; } else { cur=trie[cur].nxt[c]; } } return res; } } t; const int mxN=2e5; int n=1, q, val[mxN], which[mxN]; int tin[mxN], tout[mxN], timer=0; ar<int, 3> queries[mxN]; vector<int> adj[mxN]; void dfs(int u=0) { tin[u]=timer++; for (int v : adj[u]) dfs(v); tout[u]=timer++; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> q; for (int i=0; i<q; ++i) { string s; cin >> s; int type=s=="Add"?1:2; int a, b; cin >> a >> b; if (type==1) { --a; adj[a].push_back(n); val[n]=val[a]^b; b=val[n]; a=n++; } else --a, --b; queries[i]={type, a, b}; } //for (int i=0; i<n; ++i) cout << val[i] << " "; dfs(); t.add(0, 0); for (int i=0; i<q; ++i) { int a=queries[i][1], b=queries[i][2]; if (queries[i][0]==1) { t.add(b, tin[a]); } else { //b int ans=t.qry(val[a], tin[b], tout[b]); cout << ans << "\n"; } } /*while(q--) { string type; cin >> type; int a, b; cin >> a >> b; if (type=="Add") { --a; val[n]=val[a]^b; adj[a].push_back(n); trie.add(val[n]); ++n; } if (type=="Query") { --a, --b; int ans=q<=2000?dfs(b, val[a]):trie.qry(val[a]); cout << ans << "\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...