题意

给定一棵树和根,每个点有点权,强制在线询问\(x\)子树里离\(x\)距离不超过\(k\)的最小点权。

分析

  • 权值线段树合并的套路题,dfs,以深度作为下标,点权作为值,对每个点建立一颗权值线段树,然后回溯的时候合并到父节点的线段树上。
  • 合并时维护最小值,查询时也是查询区间最小值。
  • 内存给得多的情况下数组往死里开,不要白白送一发RE。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=6e5+50;
const int INF=0x3f3f3f3f;
vector<int> g[N];
int a[N],n,rt,u,v,lst,q,x,k;
int mn[N*30],ls[N*30],rs[N*30],tot,dep[N],tr[N];
void insert(int &rt,int l,int r,int p,int v){
if(!rt){
rt=++tot;
}
mn[rt]=v;
int mid=(l+r)/2;
if(l<r){
if(p<=mid){
insert(ls[rt],l,mid,p,v);
}else{
insert(rs[rt],mid+1,r,p,v);
}
}
}
int merge(int a,int b){
if(!a || !b){
return a+b;
}
int rt=++tot;
mn[rt]=min(mn[a],mn[b]);
ls[rt]=merge(ls[a],ls[b]);
rs[rt]=merge(rs[a],rs[b]);
return rt;
}
int query(int rt,int l,int r,int ql,int qr){
if(!rt){
return INF;
}
if(ql<=l && qr>=r){
return mn[rt];
}
int ans=INF;
int mid=(l+r)/2;
if(ql<=mid){
ans=min(ans,query(ls[rt],l,mid,ql,qr));
}
if(qr>mid){
ans=min(ans,query(rs[rt],mid+1,r,ql,qr));
}
return ans;
}
void debug(int rt,int l,int r){
printf("%d %d %d\n",l,r,mn[rt]);
if(l==r){
return;
}
int mid=(l+r)/2;
debug(ls[rt],l,mid);
debug(rs[rt],mid+1,r);
}
void dfs(int u,int f){
dep[u]=dep[f]+1;
insert(tr[u],1,n,dep[u],a[u]);
int siz=g[u].size();
for(int i=0;i<siz;i++){
int v=g[u][i];
if(v==f){
continue;
}
dfs(v,u);
tr[u]=merge(tr[u],tr[v]);
}
}
int solve(int x,int k){
return query(tr[x],1,n,dep[x],dep[x]+k);
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d%d",&n,&rt);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<n;i++){
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
dfs(rt,0);
scanf("%d",&q);
while(q--){
scanf("%d%d",&x,&k);
x=(x+lst)%n+1;
k=(k+lst)%n;
printf("%d\n",lst=solve(x,k));
}
return 0;
}

Codeforces893F_Subtree Minimum Query的更多相关文章

  1. AOJ DSL_2_A Range Minimum Query (RMQ)

    Range Minimum Query (RMQ) Write a program which manipulates a sequence A = {a0,a1,...,an−1} with the ...

  2. Range Minimum Query and Lowest Common Ancestor

    作者:danielp 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAnc ...

  3. Codeforces 893F - Subtree Minimum Query

    893F - Subtree Minimum Query 题意 给出一棵树,每次询问 \(x\) \(k\),求以 \(x\) 为根结点的子树中的结点到结点 \(x\) 的距离小于等于 \(k\) 的 ...

  4. [cf contest 893(edu round 33)] F - Subtree Minimum Query

    [cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit ...

  5. CF893F Subtree Minimum Query 解题报告

    CF893F Subtree Minimum Query 输入输出格式 输入格式: The first line contains two integers \(n\) and \(r\) ( \(1 ...

  6. [CF893F] Subtree Minimum Query

    Description: 给定一棵树,每次询问某点子树中到其不超过k的所有点的最小点权 强制在线 Hint: \(n,m\le 10^5\) Solution: 看到题目第一反应是以深度为下标,dfs ...

  7. Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)

    题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权 ...

  8. Subtree Minimum Query CodeForces - 893F (线段树合并+线段树动态开点)

    题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询 ...

  9. 2019.01.19 codeforces893F.Subtree Minimum Query(线段树合并)

    传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段 ...

随机推荐

  1. Jmeter(四)Cookie管理器

    上一节中我们用Jmeter通过接口上传了一张图片到人人网,其中请求头中的Cookie是写死的,这个Cookie其实是登录成功后服务器返回给客户端的,客户端接收到这个Cookie后保存下来,在后续向服务 ...

  2. Unity3D_(插件)小地图自刷新制作Minimap小地图

    制作小地图:小地图自刷新制作小地图 原理:用不同的图标表示场景中不同的游戏物体,将(场景中)游戏物体位置实时放置小地图上,并控制图标的位置更新 好处:可更好控制小地图上所需要显示的游戏物体 游戏项目已 ...

  3. [CSP-S模拟测试]:小W的魔术(数学 or 找规律)

    题目传送门(内部题130) 输入格式 第一行一个整数$n$,表示字符串的长度. 第二行一个只包含小写字母的字符串$s$. 输出格式 一行一个整数表示答案对$998244353$取模后的结果. 样例 样 ...

  4. jquery+css3实现熊猫tv导航效果

    效果展示 实现原理 请看以下源代码. <div class="ph-nav" data-pdt-block="pheader-n"> <div ...

  5. div随窗口变化设置高度

    window.onscroll = function () { sc(); }; window.onresize = function () { sc(); }; window.onload = fu ...

  6. 如何使用EF?

    方法1: 新建好项目之后 → 右击类库 → 新建项 → ADO.NET实体数据模型(在Visual C#项中) → 从数据库生成 → 选择你要映射的数据库的数据源(将 『是,在连接字符串中包含敏感数据 ...

  7. spark 笔记 14: spark中的delay scheduling实现

    延迟调度算法的实现是在TaskSetManager类中的,它通过将task存放在四个不同级别的hash表里,当有可用的资源时,resourceOffer函数的参数之一(maxLocality)就是这些 ...

  8. spark 笔记 8: Stage

    Stage 是一组独立的任务,他们在一个job中执行相同的功能(function),功能的划分是以shuffle为边界的.DAG调度器以拓扑顺序执行同一个Stage中的task. /** * A st ...

  9. bloom filter小结

    Bloom Filter是由 Howard Bloom在 1970 年提出的一种多哈希函数映射的快速查找算法,它是一种空间效率很高的随机数据结构,利用位数组很简洁地表示一个集合,并能判断一个元素是否属 ...

  10. mysql的双主模式配置

    第一台:192.168.0.160 第二台:192.168.0.170 主从配置,第一步:192.168.0.160 作为主数据库,192.168.0.170作为从数据库,配置如下: ======== ...