#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define ins insert
#define pb push_back
#define foru(i,a,b) for(int i=a;i<=b;i++)
#define ford(i,a,b) for(int i=a;i>=b;i--)
#define pii pair<int,int>
#define pll pair<ll,ll>
#define int ll
using namespace std;
int n,m,nq;
int a[200005],dep[200005],lca[20][200005];
vector<int> adj[200005];
set<int> t1[800005],t2[800005];
void dfs(int u,int par)
{
for(auto v:adj[u])
{
if(v==par) continue;
dep[v]=dep[u]+1;
dfs(v,u);
lca[0][v]=u;
}
}
void buildd()
{
foru(i,1,17)
{
foru(j,1,n)
{
lca[i][j]=lca[i-1][lca[i-1][j]];
}
}
}
int getlca(int u,int v)
{
if(dep[u]<dep[v]) swap(u,v);
ford(i,17,0)
{
if(dep[lca[i][u]]>=dep[v])
{
u=lca[i][u];
}
}
if(v==u) return u;
else
{
ford(i,17,0)
{
if(lca[i][u]!=lca[i][v])
{
u=lca[i][u];
v=lca[i][v];
}
}
return lca[0][u];
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
// freopen(".inp","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>m>>nq;
foru(i,1,n-1)
{
int x,y;
cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
dep[1]=1;
dfs(1,0);
buildd();
foru(i,1,m)
{
cin>>a[i];
t1[a[i]].insert(i);
}
foru(i,1,m-1)
{
int u=getlca(a[i],a[i+1]);
t2[u].insert(i);
// cout<<'?'<<u<<' '<<i<<endl;
}
while(nq--)
{
int ord;
cin>>ord;
if(ord==1)
{
int id,x;
cin>>id>>x;
t1[a[id]].erase(id);
int par=0;
par=getlca(a[id-1],a[id]);
if(t2[par].find(id-1)!=t2[par].end())
t2[par].erase(t2[par].find(id-1));
par=getlca(a[id],a[id+1]);
if(t2[par].find(id)!=t2[par].end())
t2[par].erase(t2[par].find(id));
a[id]=x;
t1[a[id]].insert(id);
par=getlca(a[id-1],a[id]);
if(id-1!=0&&id!=m)
t2[par].insert(id-1);
par=getlca(a[id],a[id+1]);
if(id!=m&&id!=0)
t2[par].insert(id);
}
else
{
int l,r,v;
cin>>l>>r>>v;
auto it=t1[v].lower_bound(l);
if(it!=t1[v].end()&&(*it)<=r)
{
cout<<*it<<' '<<*it<<'\n';
continue;
}
auto itt=t2[v].lower_bound(l);
if(itt!=t2[v].end()&&(*itt)<r)
{
cout<<*itt<<' '<<*itt+1<<'\n';
continue;
}
cout<<-1<<' '<<-1<<'\n';
}
}
}
/*
em thi cho du co khoc
cung se den ngay phai quen
thien duong van cho ngay em den
*/
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |