Submission #1138856

#TimeUsernameProblemLanguageResultExecution timeMemory
1138856SkymagicBirthday gift (IZhO18_treearray)C++17
0 / 100
3 ms4932 KiB
/******************** * what the sigma * ********************/ #include <iostream> #include <vector> #include <map> #include <queue> #include <algorithm> #include <stack> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set(x) tree<x, null_type, less<x>, rb_tree_tag, tree_order_statistics_node_update> using namespace std; #define lgm cin.tie(0)->sync_with_stdio(0); #define be(x) x.begin(),x.end() #define ve vector #define ll long long #define ld long double bool enabledb=0; #define DB(CODE) cout<<'\t'<<CODE<<endl; #define SP <<' '<< #define ull unsigned ll #define f first #define s second #define pii pair<int, int> #define tii tuple<int,int,int> #define pll pair<ll,ll> #define sz(x) (int)x.size() #define pb push_back const ll mod = 1e9+7,maxn=200005; const ll INF=(ll)9e18; ve<int> ed[maxn]; int pa[maxn][20]; int dep[maxn]; void dfs(int u,int par) { pa[u][0]=par; for (int i=1;i<20;i++) { pa[u][i]=pa[pa[u][i-1]][i-1]; } dep[u]=dep[par]+1; for (auto i:ed[u]) { if (i==par) continue; dfs(i,u); } } int lift(int u,int dist) { for (int i=0;i<20;i++) { if ((1<<i)&dist) { u=pa[u][i]; } } return u; } signed main() { lgm; int n,m,q; cin >> n >> m >> q; int x,y,z; for (int i=0;i<n-1;i++) { cin >> x >> y; ed[x].pb(y); ed[y].pb(x); } dfs(1,1); ve<int> a(m+1); for (int i=1;i<=m;i++) { cin >> a[i]; } while (q--) { cin >> x; if (x==1) { cin >> x >> y; a[x]=y; } else { cin >> x >> y >> z; int cur=0,st=0,en=0; bool yes=0; for (int i=x;i<=y;i++) { if (a[i]==z) { yes=1; st=en=i; break; } if (dep[z]>=dep[a[i]]) {cur=0;continue;} int v=lift(a[i],dep[a[i]]-dep[z]-1); if (pa[v][0]==z) { if (cur==0) cur=v,st=i,en=i; else if (v!=cur) { yes=1; en=i; break; } } } if (yes) { cout << st SP en << '\n'; } else { cout << "-1 -1\n"; } } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...