Submission #1162856

#TimeUsernameProblemLanguageResultExecution timeMemory
1162856SulABirthday gift (IZhO18_treearray)C++20
0 / 100
0 ms836 KiB
#include <bits/stdc++.h> #define all(a) a.begin(), a.end() #define popcount __builtin_popcountll using namespace std; vector<int> adj[2000], sub[2000]; int lca[2000][2000], in[2000], out[2000], par[2000][11], t = 0; int a[2000]; void dfs(int u = 0, int p = -1) { in[u] = t++; sub[u] = {u}; lca[u][u] = u; for (int v : adj[u]) if (v != p) { par[v][0] = u; for (int i = 1; i <= 10; i++) par[v][i] = par[par[v][i-1]][i-1]; dfs(v, u); for (int x : sub[v]) { for (int y : sub[u]) { lca[x][y] = lca[y][x] = u; } } for (int x : sub[v]) sub[u].push_back(x); } out[u] = t++; } bool is_anc(int u, int v) { return in[u] <= in[v] && out[v] <= out[u]; } pair<int,int> solve(int l, int r, int u) { vector<int> subtree; int last = l; for (int i = l; i <= r; i++) { if (is_anc(u, a[i])) subtree.push_back(a[i]); else { if (subtree.empty()) { last = i+1; continue; } int L = subtree[0]; for (int x : subtree) L = lca[L][x]; if (L == u) return {last, i-1}; last = i+1; } } if (subtree.empty()) return {-2, -2}; int L = subtree[0]; for (int x : subtree) L = lca[L][x]; if (L == u) return {last, r}; return {-2, -2}; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n,m,q; cin>>n>>m>>q; for (int i = 0; i < n-1; i++) { int u,v; cin>>u>>v; adj[--u].push_back(--v); adj[v].push_back(u); } dfs(); // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // cout << i+1 << " " << j+1 << " " << 1+lca[i][j] << "\n"; // } // } for (int i = 0; i < m; cin>>a[i], a[i++]--); while (q--) { cin>>t; if (t == 1) { int i,x; cin>>i>>x; a[--i] = --x; } else { int l,r,u; cin>>l>>r>>u; auto [x, y] = solve(--l, --r, --u); cout << 1+x << " " << 1+y << "\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...