Submission #578084

#TimeUsernameProblemLanguageResultExecution timeMemory
578084handlenameGame (APIO22_game)C++17
2 / 100
9 ms14424 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair const int MOD=1e9+7; int n,k; vector<int> adj[300001],rev[300001]; struct node{ node *l,*r; //left node stores stuff which can reach m //right node stores stuff which m can reach int s,m,e; unordered_set<int> stuff; node(int ss,int ee){ s=ss; e=ee; m=(s+e)/2; for (int i=s;i<=e;i++) stuff.insert(i); if (s!=e){ l=new node(s,m); r=new node(m+1,e); } } bool upd(int u,int v){ if (s==e){ stuff.insert(u); stuff.insert(v); return false; } /* cout<<"update "<<s<<' '<<m<<' '<<e<<' '<<u<<' '<<v<<'\n'; cout<<"left: "; for (auto i:l->stuff) cout<<i<<' '; cout<<'\n'; cout<<"right: "; for (auto i:r->stuff) cout<<i<<' '; cout<<'\n'; */ bool uleft=l->stuff.find(u)!=l->stuff.end(); bool uright=r->stuff.find(u)!=r->stuff.end(); bool vleft=l->stuff.find(v)!=l->stuff.end(); bool vright=r->stuff.find(v)!=r->stuff.end(); if (uleft){ if (vleft) return l->upd(u,v); if (vright) return false; return false; //v can only reach stuff on right, u->m->right, so u->v->right useless } if (uright){ if (vleft) return true; if (vright) return r->upd(u,v); stuff.insert(v); if (r->upd(u,v)) return true; for (auto i:adj[v]){ if (upd(v,i)) return true; } return false; } if (vleft){ stuff.insert(u); if (l->upd(u,v)) return true; for (auto i:rev[u]){ if (upd(i,u)) return true; } return false; } if (vright){ return false; //only stuff on left can reach u, left->m->v, so left->u->v useless } return false; } }*root; void init(int N,int K){ n=N; k=K; for (int i=1;i<k;i++){ adj[i].pb(i+1); rev[i+1].pb(i); } root=new node(1,k); } int add_teleporter(int u,int v){ u++; v++; adj[u].pb(v); rev[v].pb(u); if (u==v && u<=k) return 1; if (u==v) return 0; return root->upd(u,v); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...