제출 #675057

#제출 시각아이디문제언어결과실행 시간메모리
675057YENGOYANBirthday gift (IZhO18_treearray)C++17
0 / 100
1 ms468 KiB
// eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee // // 271828___182845__904523__53602__ // // 87___47____13______52____66__24_ // // 97___75____72______47____09___36 // // 999595_____74______96____69___67 // // 62___77____24______07____66__30_ // // 35___35____47______59____45713__ // // eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee // #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <set> #include <map> #include <unordered_map> #include <unordered_map> #include <cmath> #include <climits> #include <algorithm> #include <random> #include <queue> #include <deque> #include <iomanip> #include <string> #include <tuple> #include <bitset> #include <chrono> #include <ctime> #include <fstream> #include <stack> #include <cstdio> using namespace std; using ll = long long; const int N = 1e5 + 5; const ll mod = 1e9 + 7, inf = 1e18; vector<int> a, tin, tout; vector<vector<int>> gp, up; int n, m, q, timer = 0; void dfs(int v, int p) { tin[v] = ++timer; up[v][0] = p; for (int i = 1; i < 20; ++i) up[v][i] = up[up[v][i - 1]][i - 1]; for (int u : gp[v]) { if (u != p) dfs(u, v); } tout[v] = ++timer; } bool is_ancestor(int u, int v) { return tin[u] <= tin[v] && tout[u] >= tout[v]; } int lca(int u, int v) { if (is_ancestor(u, v)) return u; if (is_ancestor(v, u)) return v; for (int i = 19; i >= 0; --i) { if (!is_ancestor(up[u][i], v)) u = up[u][i]; } return up[u][0]; } void solve() { cin >> n >> m >> q; a = tin = tout = vector<int>(n); gp = vector<vector<int>>(n); up = vector<vector<int>>(n, vector<int>(20)); for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; gp[--u].push_back(--v); gp[v].push_back(u); } for (int i = 0; i < m; ++i) cin >> a[i],--a[i]; dfs(0, 0); while (q--) { int type; cin >> type; if (type == 2) { int l, r, v; cin >> l >> r >> v; --l, --r, --v; bool f = 0; while (l < n && l <= r) { if (a[l] == v) { cout << l + 1 << " " << l + 1 << '\n'; f = 1; break; } if (l < r && lca(a[l], a[l + 1]) == v) { cout << l + 1 << ' ' << l + 2 << '\n'; f = 1; break; } ++l; } if (!f) { cout << "-1 -1\n"; } } else { int i, val; cin >> i >> val; a[--i] = --val; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); //int _; cin >> _; while (_--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...