Submission #701235

#TimeUsernameProblemLanguageResultExecution timeMemory
701235vjudge1Birthday gift (IZhO18_treearray)C++17
56 / 100
1202 ms99864 KiB
#include<bits/stdc++.h> #define TASKNAME "codeforce" #define pb push_back #define pli pair<int,int> #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); using namespace std; using ll=long long; const ll maxN=2e5+10; const ll inf=1e18; const ll mod=1e9+7; ll n,m,q; vector<ll> g[maxN]; ll P[maxN][19],h[maxN]; void dfs(ll u=1,ll p=1) { P[u][0]=p; for(int i=1;i<=18;i++) P[u][i]=P[P[u][i-1]][i-1]; for(int v:g[u]) { if(v!=p) { h[v]=h[u]+1; dfs(v,u); } } } ll a[maxN]; set<int> s[maxN]; ll lca(ll u,ll v) { if(h[u]<h[v]) swap(u,v); for(int i=18;i>=0;i--) if(h[u]-(1<<i)>=h[v]) u=P[u][i]; if(u==v) return u; for(int i=18;i>=0;i--) if(P[u][i]!=P[v][i]) u=P[u][i],v=P[v][i]; return P[u][0]; } set<int> ss[maxN]; void solve() { cin >> n >> m >> q; for(int i=1;i<n;i++) { ll u,v; cin >> u >> v ; g[u].pb(v); g[v].pb(u); } dfs(); for(int i=1;i<=m;i++) { cin >> a[i]; if(i>1) { s[lca(a[i],a[i-1])].insert(i); } ss[a[i]].insert(i); } for(int tt=1;tt<=q;tt++) { ll t; cin >> t; if(t==1) { ll i,val; cin >> i >> val; ss[a[i]].erase(i); ss[val].insert(i); if(i>1) { s[lca(a[i],a[i-1])].erase(i); s[lca(val,a[i-1])].insert(i); } if(i<n) { s[lca(a[i],a[i+1])].erase(i+1); s[lca(val,a[i+1])].insert(i+1); } a[i]=val; } else { ll l,r,v; cin >> l >> r >> v; auto cc=s[v].upper_bound(l); if(cc!=s[v].end()&&*cc<=r) { cout << *cc-1<<' '<<*cc<<'\n'; } else { cc=ss[v].lower_bound(l); if(cc!=ss[v].end()&&*cc<=r) { cout << *cc<<' '<<*cc<<'\n'; } else cout << -1 <<' '<<-1<<'\n'; } } } } int main() { fastio //freopen(TASKNAME".INP","r",stdin); //freopen(TASKNAME".OUT","w",stdout); 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...