Submission #854234

#TimeUsernameProblemLanguageResultExecution timeMemory
854234FaeeBirthday gift (IZhO18_treearray)C++14
100 / 100
1827 ms81472 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pii pair<ll,ll> #define pb push_back #define fi first #define se second #define lb lower_bound const ll N = 2e5+5; const ll LOG = 20; ll n,m,q,u,v; ll l,r,node,val; ll upd,event; bool ans; ll depth[N],a[N]; ll anc[N][LOG]; vector<ll> adj[N]; set<pii> st,st2; void dfs(ll x, ll y) { anc[x][0] = y; depth[x] = depth[y] + 1; for(int i=1; i<LOG; i++) { anc[x][i] = anc[anc[x][i-1]][i-1]; } for(auto i : adj[x]) { if(i == y) continue; dfs(i,x); } } ll lca(ll x, ll y) { if(depth[x] < depth[y]) swap(x,y); for(int i=LOG-1; i>=0; i--) { if(depth[anc[x][i]] >= depth[y]) { x = anc[x][i]; } } if(x == y) return x; for(int i=LOG-1; i>=0; i--) { if(anc[x][i] != anc[y][i]) { x = anc[x][i]; y = anc[y][i]; } } return anc[x][0]; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> q; for(int i=1; i<n; i++) { cin >> u >> v; adj[u].pb(v); adj[v].pb(u); } dfs(1,0); for(int i=1; i<=m; i++) { cin >> a[i]; st2.insert({a[i],i}); } for(int i=1; i<m; i++) st.insert({lca(a[i],a[i+1]),i}); while(q--) { cin >> event; if(event == 1) { cin >> upd >> val; if(upd > 1) st.erase({lca(a[upd],a[upd-1]),upd-1}); if(upd < m) st.erase({lca(a[upd],a[upd+1]),upd}); st2.erase({a[upd],upd}); a[upd] = val; if(upd > 1) st.insert({lca(a[upd],a[upd-1]),upd-1}); if(upd < m) st.insert({lca(a[upd],a[upd+1]),upd}); st2.insert({a[upd],upd}); } else { cin >> l >> r >> node; pii var = {node,l}; auto temp = st.lb(var); auto temp2 = st2.lb(var); if((*temp).fi == node && (*temp).se < r && temp != st.end()) { cout << (*temp).se << " " << (*temp).se + 1 << endl; } else if((*temp2).fi == node && (*temp2).se <= r && temp2 != st2.end()) { cout << (*temp2).se << " " << (*temp2).se << endl; } else cout << "-1 -1" << endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...