Submission #1134573

#TimeUsernameProblemLanguageResultExecution timeMemory
1134573AgageldiBirthday gift (IZhO18_treearray)C++17
0 / 100
6 ms9796 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define N 400005 #define ff first #define ss second #define pb push_back #define sz(s) (int)s.size() ll n, t, T, a[N], q, m, lvl[N], vis[N], sp[N][30], par[N]; vector <int> v[N], h; int kth_ancestor(int x,int y) { for(int i = 20; i >= 0; i--) { if((y & (1 << i))) x = sp[x][i]; } return x; } int find(int x,int y) { if(lvl[x] > lvl[y]) { x = kth_ancestor(x,lvl[x] - lvl[y]); } if(lvl[x] < lvl[y]) { y = kth_ancestor(y,lvl[y] - lvl[x]); } if(x == y) return x; int o = 0; for(int i = 20; i >= 0; i--) { if(sp[x][i] != sp[y][i]) { x = sp[x][i]; y = sp[y][i]; } } return sp[x][0]; } void solve(int x,int lev) { lvl[x] = lev; vis[x] = 1; for(auto i:v[x]) { if(vis[i]) continue; sp[i][0] = x; solve(i,lev + 1); } } int main () { ios::sync_with_stdio(0);cin.tie(0); cin >> n >> m >> q; for(int i = 1; i < n; i++) { int x, y; cin >> x >> y; v[x].pb(y); v[y].pb(x); } solve(1,1); for(int i = 1;i <= m; i++) { cin >> a[i]; } for(int i = 1; i <= 20; i++) { for(int j = 1; j <= n; j++) { sp[j][i] = sp[sp[j][i - 1]][i - 1]; } } for(int i = 1; i <= q; i++) { int pos, x, l, r; cin >> t; if(t == 1) { cin >> pos >> x; a[pos] = x; continue; } cin >> l >> r >> x; bool tr = 0; for(int j = l; j <= r; j++) { int c = a[j]; for(int k = j; k >= 1; k--) { c = find(c,a[k]); if(c == x) { tr = 1; cout << k << " " << j << '\n'; break; } } if(tr) break; } if(!tr) 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...