题意

给定一棵树和根,每个点有点权,强制在线询问\(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. openwrt boot 启动出现的问题

    一.boot启动出现JFFS2挂载文件系统错误 问题排查: 1.固件问题. 2.刷机,写进去不完整. 3.flash有问题. 二.openwrt 进入web页面出错 解决方法: 1.SSH进去,先恢复 ...

  2. Java缓存技术有哪些

    我们用ehcache在本地,分布式用redis和memcache,各有各的好处,现在企业都是应用很多种中间件供俺们码农选择.

  3. 树莓派安装parrot linux记录

    手头这台树莓派3b安装parrot linux arm遇到了不少问题,写篇博客记录一下. 1.下载和刻录 网址:https://www.parrotsec.org/download-other.php ...

  4. 190707Python-RabbitMQ

    一.简单的RabbitMQ示例 生产者 # Author:Li Dongfei import pika connection = pika.BlockingConnection( pika.Conne ...

  5. 【Spark机器学习速成宝典】模型篇08支持向量机【SVM】(Python版)

    目录 什么是支持向量机(SVM) 线性可分数据集的分类 线性可分数据集的分类(对偶形式) 线性近似可分数据集的分类 线性近似可分数据集的分类(对偶形式) 非线性数据集的分类 SMO算法 合页损失函数 ...

  6. python模块------pyautogui

    安装 pip install pyautogui 基本使用 查询 screenWidth, screenHeight = pyautogui.size() # 屏幕尺寸 mouseX, mouseY ...

  7. Jmeter (四)聚合报告详解

  8. apache域名跳转

    状态码:*301: 永久重定向,域名跳转一定要用301,对搜索引擎友好的. 302:临时重定向在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts & ...

  9. 阶段3 2.Spring_03.Spring的 IOC 和 DI_12 注入集合数据

    再复制一份,改名3 常用的注入方式,这里选择set saveAccount方法输出所有的对象 map需要导包 配置xml 集合类型的值配置方式 在property标签里面再写标签 这里选择array. ...

  10. Python学习笔记:time模块的使用

    在使用python的过程中,很多情况下会使用到日期时间,在Python的自建函数中,包含time模块,用来处理与日期时间相关的功能. 1.time.time() time():不能传参数 用来获取时间 ...