제출 #173253

#제출 시각아이디문제언어결과실행 시간메모리
173253LinusTorvaldsFanBirthday gift (IZhO18_treearray)C++14
12 / 100
4096 ms5240 KiB
#include <bits/stdc++.h> using namespace std; const int maxn=2e5+19; vector<int>T[maxn]; vector<pair<int,int>>euler_path; int min_tin[maxn]; int h[maxn]; void gfs(int v, int p){ min_tin[v]=euler_path.size(); euler_path.push_back({h[v],v}); for(auto u:T[v]){ if(u==p)continue; h[u]=h[v]+1; gfs(u,v); euler_path.push_back({h[v],v}); } } int lca(int x, int y) { if(min_tin[x]>min_tin[y]){ swap(x,y); } pair<int,int> ans={h[x],x}; for(int i=min_tin[x];i<=min_tin[y];i++){ ans=min(ans,euler_path[i]); } return ans.second; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; int m; cin>>m; int q; cin>>q; for(int i=0;i<n-1;i++){ int a,b; cin>>a>>b; T[a].push_back(b); T[b].push_back(a); } gfs(1,-1); vector<int>a(m); for(int i=0;i<m;i++){ cin>>a[i]; } for(;q;q--){ int t; cin>>t; if(t==1) { int pos,v; cin>>pos>>v; pos--; a[pos]=v; } if(t==2) { int l,r,v; cin>>l>>r>>v; l--;r--; int ansL=-1; int ansR=-1; for(int i=l;i<=r;i++){ int cur_lca=a[i]; for(int j=i;j<=r;j++){ cur_lca=lca(cur_lca,a[j]); if(cur_lca==v){ ansL=i+1; ansR=j+1; break; } } } cout<<ansL<<" "<<ansR<<"\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...