[CF893F]Subtree Minimum Query

题目大意:

给你一颗有根树,点有权值,m次询问,每次问你某个点的子树中距离其不超过k的点的权值的最小值。(边权均为1,点权有可能重复,k值每次询问有可能不同,强制在线

做法跟HDU那道题一样,开两颗线段树,一颗维护每个深度最小值,一颗维护每个值所在最低深度,合并第二个线段树的时候顺便修改第一个即可

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define M 100010
 6 using namespace std;
 7 int n,m,num,cnt,top,r,ans;
 8 int head[M],a[M],b[M],rt1[M],rt2[M],deep[M];
 9 int val[M<<8],ch[M<<8][2];
10 struct point{int to,next;}e[M<<1];
11 void add(int from,int to) {
12     e[++num].next=head[from];
13     e[num].to=to;
14     head[from]=num;
15 }
16 int get(int x) {
17     int l=1,r=top;
18     while(l<=r) {
19         int mid=(l+r)/2;
20         if(b[mid]==x) return mid;
21         if(b[mid]>x) r=mid-1;
22         else l=mid+1; 
23     }
24 }
25 int insert(int rt,int l,int r,int x,int v) {
26     int node=++cnt;val[node]=min(val[rt],v);
27     if(l==r) return node;
28     int mid=(l+r)/2;
29     ch[node][0]=ch[rt][0],ch[node][1]=ch[rt][1];
30     if(x<=mid) ch[node][0]=insert(ch[rt][0],l,mid,x,v);
31     else ch[node][1]=insert(ch[rt][1],mid+1,r,x,v);
32     return node;
33 }
34 int merge1(int x,int y,int l,int r) {
35     if(!x||!y) return x+y;
36     int node=++cnt,mid=(l+r)/2;
37     val[node]=min(val[x],val[y]);
38     if(l==r) return node;
39     ch[node][0]=merge1(ch[x][0],ch[y][0],l,mid);
40     ch[node][1]=merge1(ch[x][1],ch[y][1],mid+1,r);
41     return node;
42 }
43 int merge2(int x,int y,int l,int r,int id) {
44     if(!x||!y) return x+y;
45     int node=++cnt,mid=(l+r)/2;
46     if(l==r) {
47         val[node]=min(val[x],val[y]);
48         rt1[id]=insert(rt1[id],1,n,val[node],l);
49         return node;
50     }
51     ch[node][0]=merge2(ch[x][0],ch[y][0],l,mid,id);
52     ch[node][1]=merge2(ch[x][1],ch[y][1],mid+1,r,id);
53     return node;
54 }
55 int query(int node,int l,int r,int l1,int r1) {
56     if(l1<=l&&r1>=r) return val[node];
57     int mid=(l+r)/2,ans=1e9;
58     if(l1<=mid) ans=min(ans,query(ch[node][0],l,mid,l1,r1));
59     if(r1>mid) ans=min(ans,query(ch[node][1],mid+1,r,l1,r1));
60     return ans;
61 }
62 void dfs(int x,int fa) {
63     deep[x]=deep[fa]+1;
64     rt1[x]=insert(0,1,n,deep[x],a[x]);
65     rt2[x]=insert(0,1,n,a[x],deep[x]);
66     for(int i=head[x];i;i=e[i].next)
67         if(e[i].to!=fa) {
68             dfs(e[i].to,x);
69             rt1[x]=merge1(rt1[x],rt1[e[i].to],1,n);
70             rt2[x]=merge2(rt2[x],rt2[e[i].to],1,n,x);
71         }
72 }
73 int main() {
74     memset(val,1,sizeof(val));
75     scanf("%d%d",&n,&r);
76     for(int i=1;i<=n;i++) 
77         scanf("%d",&a[i]),b[++top]=a[i];
78     sort(b+1,b+1+top);top=unique(b+1,b+1+top)-b-1;
79     for(int i=1;i<=n;i++) a[i]=get(a[i]);
80     for(int i=1;i<n;i++) {
81         int a,b;scanf("%d%d",&a,&b);
82         add(a,b),add(b,a);
83     }
84     dfs(r,0);scanf("%d",&m);
85     for(int i=1;i<=m;i++) {
86         int x,k;scanf("%d%d",&x,&k);
87         x=(x+ans)%n+1,k=(k+ans)%n;
88         printf("%d\n",ans=b[query(rt1[x],1,n,deep[x],min(deep[x]+k,n))]);
89     }
90     return 0;
91 }

 

转载于:https://www.cnblogs.com/Slrslr/p/10032935.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac电脑快捷键(持续更新)

1、快速查找软件 commandspace 2、显示/隐藏文件夹 shiftcmmand. 3、路径输入 commandshiftg 4、快速打开软件 commandtab 5、截图 commandshift3 commandshift4 6、注销 Command-Shift-Q 7、强制注销 ommand-Shift-Option-Q 8、睡眠 controlshift电源键 9、选…

C语言typedef关键字—伟大的缝纫师

关于马甲的笑话。有这样一个笑话&#xff1a;一个猎人在河边抓捕一条蛇&#xff0c;蛇逃进了水里。过一会&#xff0c;一个乌龟爬到岸边。猎人一把抓住这个乌龟&#xff0c;大声的说道&#xff1a;小样&#xff0c;别你为你穿了个马甲我就不认识你了&#xff01;typedef 关键字…

将网桥的配置写进去/etc/sysconfig/network-scripts/ifcfg-xxx

有时候需要使用网桥命令比如brctl设置一些网桥的属性&#xff0c;而这些方式能否同样写进去配置文件使其永久开机生效。 答案是不行的&#xff0c;也同样找过Ubuntu的&#xff0c;其实Ubuntu可以实现&#xff0c;参考&#xff1a;http://manpages.ubuntu.com/manpages/cosmic/m…

phpstorm如何回滚。并取消本地提交

1、现在我提交到本地 当前git版本为4b53dca9 上一版本为965cdf14 2、现在执行回滚操作&#xff0c;取消本地提交 版本复制到这里&#xff0c;点击reset就会回滚了 如需使用git命令操作&#xff0c;请参考链接https://blog.csdn.net/qq_35774849/article/details/107313193

windows server 2008 R2 x64 基础知识(2)

一、防火墙设置 1.windows防火墙的种类&#xff1a; 1)工作组网络环境 2)域网络环境 2.防火墙的配置 1)打开管理工具&#xff1a;win->管理工具->高级安全windows防火墙 2)管理配置&#xff1a; (1)防火墙的数据流类型 a.入站流量&#xff1a;外部访问内部分流量 b…

SOA 说明,解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一直对SOA这个概念不甚明了&#xff0c;再度记录下&#xff1a; 一、是一个面向服务的架构&#xff0c;是一种思想、规则。而不是一个确…

Windows API 第二篇 SHGetSpecialFolderPath

BOOL SHGetSpecialFolderPath( HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate ); 参数解释&#xff1a; hwndOwner&#xff1a;Handle to the owner wind…

面向对象—的__new__()方法详解

[Python] Python 之 __new__() 方法与实例化 __new__() 是在新式类中新出现的方法&#xff0c;它作用在构造方法建造实例之前&#xff0c;可以这么理解&#xff0c;在 Python 中存在于类里面的构造方法 __init__() 负责将类的实例化&#xff0c;而在 __init__() 启动之前&#…

git使用回滚,清除暂缓区,解决冲突(持续更新)

1、git restore --staged <文件> 清除暂缓区文件名 2、git reset --hard <版本号> 回滚到上一版本 如看PHPstrom如何操作请参考https://blog.csdn.net/qq_35774849/article/details/107312658 3、解决冲突 &#xff08;1&#xff09;使用默认的解决冲突 打开…

14.安全

1.基本概念 安全问题的产生&#xff1a; 互联网作为商业交易的工具快速发展&#xff0c;越来越多的公司提供网络交易服务。很多商业活动在网上进行当前&#xff0c;成千上万的网民在网上进行各种活动的同时&#xff0c;也在网上传递其个人信息每天在网上发生各种各样的商业活动…

C语言enum关键字

很多初学者对枚举(enum)感到迷惑&#xff0c;或者认为没什么用&#xff0c;其实枚举(enum)是个很有用的数据类型。一、枚举类型的使用方法 一般的定义方式如下&#xff1a;enum enum_type_name{ENUM_CONST_1,ENUM_CONST_2,...ENUM_CONST_n} enum_variable_name;注意&#xff1a…

Dubbo 需求、架构、使用Demo

只是整理下方便自己记录 内容全部来自官网&#xff1a;http://dubbo.io/books/dubbo-user-book/preface/usage.html 一、需求 在大规模服务化之前&#xff0c;应用可能只是通过 RMI 或 Hessian 等工具&#xff0c;简单的暴露和引用远程服务&#xff0c;通过配置服务的URL地址进…

Ubuntu安装之python开发

Ubuntu安装之python开发 什么&#xff1f;&#xff1f;Ubuntu(乌班图)开发&#xff1f;不会用&#xff1f;&#xff1f;怎么进行python开发&#xff1f;&#xff1f;&#xff1f; 乌班图操作系统下载地址&#xff1a;http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-…

vimdiff和vim-fugitive安装,使用教程

1、vimdiff的安装 在终端执行 git config --global merge.tool vimdiff git config --global merge.conflictstyle diff3 git config --global mergetool.prompt false git config --global diff.tool vimdiff git config --global difftool.prompt false git config --…

在 PowerPoint 2016 中嵌入网页

之前在智图这个网站上做了一张地图&#xff0c;在嵌入 PPT 里面的时候碰到了一些问题&#xff0c;现在把找到的解决方法写下来。 PPT 里面自带的 WebBrowser 控件可以实现网页浏览的功能。在“开发工具”选项卡下的“其他控件”中找到“Microsoft Web Browser”&#xff0c;在画…

js 正则表达式 整合

正则表达式:断言 取字符串区间: /(?<[" star "]).*(?[" end "])/// 简单封装 Vue.prototype.strMatch (str,star,end) > { let regs new RegExp("(?<[" star "]).*(?[" end "])"); let req str…

dubbo 注册中心zookeeper 手册

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 zookeeper 注册中心 Zookeeper 是 Apacahe Hadoop 的子项目&#xff0c;是一个树型的目录服务&#xff0c;支持变更推送&#xff0c;适…

数组 深入详解

再论C语言数组 C语言处理数组的方式是它广受欢迎的原因之一。C语言对数组的处理是非常有效的&#xff0c;其原因有以下三点&#xff1a;第一&#xff0c;除少数翻译器出于谨慎会作一些繁琐的规定外&#xff0c;C语言的数组下标是在一个很低的层次上处理的。但这个优点也有一个反…

oracle ins-30131错误

打开cmd 但是在我的环境没效果&#xff0c;而我已知临时目录没有问题。那么在命令行进入安装软件目录&#xff0c;通过命令行启动安装程序&#xff0c;设置 ignorePrereq 检查&#xff0c;此时数据库软件可以启动安装&#xff0c;是否会出现错误&#xff0c;就看忽略的检查是否…

iOS开发UI篇—简单介绍静态单元格的使用

一、实现效果与说明 说明&#xff1a;观察上面的展示效果&#xff0c;可以发现整个界面是由一个tableview来展示的&#xff0c;上面的数据都是固定的&#xff0c;且几乎不会改变。 要完成上面的效果&#xff0c;有几种方法&#xff1a; &#xff08;1&#xff09;可以直接利用代…