Submission #879256

#TimeUsernameProblemLanguageResultExecution timeMemory
879256The_SamuraiBirthday gift (IZhO18_treearray)C++17
56 / 100
4022 ms38180 KiB
// I stand with PALESTINE //#pragma GCC optimize("Ofast,O3") //#pragma GCC target("avx,avx2") #include "bits/stdc++.h" using namespace std; using ll = long long; const int lg = 18; vector<vector<int>> g, jump; vector<int> tin, tout; int z; void dfs(int u) { if (u != 1) { for (int i = 1; i < lg; i++) { jump[i][u] = jump[i - 1][jump[i - 1][u]]; if (!jump[i][u]) break; } } tin[u] = z++; for (int v: g[u]) { if (jump[0][u] == v) continue; jump[0][v] = u; dfs(v); } tout[u] = z++; } bool isPar(int u, int v) { return tin[u] <= tin[v] and tout[v] <= tout[u]; } int lca(int u, int v) { if (v == 0 or isPar(u, v)) return u; if (u == 0 or isPar(v, u)) return v; for (int i = lg - 1; i >= 0; i--) { if (!jump[i][u] or isPar(jump[i][u], v)) continue; u = jump[i][u]; } return jump[0][u]; } void solve() { int n, m, q; cin >> n >> m >> q; g.assign(n + 1, {}); jump.assign(lg, vector<int>(n + 1)); tin.assign(n + 1, 0); tout.assign(n + 1, 0); for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; g[u].emplace_back(v); g[v].emplace_back(u); } vector<int> a(m + 1); for (int i = 1; i <= m; i++) cin >> a[i]; dfs(1); while (q--) { int op; cin >> op; if (op == 1) { int i; cin >> i >> a[i]; } else { int l, r, root; cin >> l >> r >> root; int anc = 0; bool found = false; for (int lx = l, rx = l; rx <= r; rx++) { anc = lca(anc, a[rx]); if (anc == root) { cout << lx << ' ' << rx << '\n'; found = true; break; } if (!isPar(root, anc)) { lx = rx + 1; anc = 0; } } if (!found) cout << "-1 -1\n"; } } } int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int q = 1; // cin >> q; while (q--) { solve(); cout << '\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...