CF893F
CF893F
首先,我们发现,这个题只需要子树内的答案,且只需要维护最小值。
注意到对于两个点
注意到
考虑进行广搜,设当前在搜
我们暴力地从当前点 break
。
在没有遇到之前,我们边跳边用一颗动态开点线段树维护答案,也即第
然后我们暴力查区间最小值即可。
void init(){
queue<int>q;
q.push(r);
while(!q.empty()){
int u=q.front();q.pop();
dep[u]=dep[fa[u]]+1;
int dis=1,v=fa[u];
insert(rt[u],1,n,dis,val[u]);
while(val[v]>val[u]){
++dis;insert(rt[v],1,n,dis,val[u]);val[v]=val[u];
v=fa[v];
}
for(auto v:g[u]){
if(v==fa[u])continue;
q.push(v);
}
}
}
int ask(int u,int k){
return find(rt[u],1,n,1,k);
}
signed main(){
ios::sync_with_stdio(false);
cin>>n>>r;val[0]=-0x3f3f3f3f;
for(int i=1;i<=n;i++)cin>>val[i];
for(int i=1;i<n;i++){
int u,v;cin>>u>>v;
g[u].push_back(v);g[v].push_back(u);
}
for(int i=1;i<=n;i++){
random_shuffle(g[i].begin(),g[i].end());
}
dfs(r,0);
init();
cin>>m;int lst=0;
while(m--){
int u,k;cin>>u>>k;
u=(u+lst)%n+1;k=(k+lst)%n;++k;
lst=ask(u,k);cout<<lst<<"\n";
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!