题意:如图,有N个柱子,每次我可以从高柱子X到低柱子Y,而且需要满足中间的柱子都小于X的高度。

思路:现在有Q次询问,每次给定(X,Y),(如果ht[X]<ht[Y],则交换XY),问X为起点,Y为终点的最长路径。 如果Y为0,你可以选择任一点为终点。

每次我们把当前dfs的区间最高的几个柱子(假设高度为H)抽出来,它们把当前区间划分为了几个小区间,可以把这些高的柱子看成根,那么被夹在中间的区间就是子树,再去dfs深入中间的区间即可。   最后假如要从X到Y,如果它们之间没有更高的,答案就是深度差

由于每个柱子只被当成一次根,所的复杂度是O(N)的,加上RMQ找区间最大值,总的时间是O(NlogN)的。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int h[maxn],dep[maxn],ans[maxn];
int mx[][maxn],Log[maxn];
int Max(int a,int b){ return h[a]>=h[b]?a:b;}
int find(int L,int R)
{
int k=Log[R-L+];
return Max(mx[k][L],mx[k][R-(<<k)+]);
}
int solve(int L,int R,int d)
{
if(L>R) return -;
int p=find(L,R); dep[p]=d;
ans[p]=solve(L,p-,d+)+;
int res=ans[p];
while(p<R){
int q=find(p+,R);
if(h[q]!=h[p]) break;
dep[q]=d;
int t=solve(p+,q-,d+)+;
res=max(res,t);
ans[p]=max(ans[p],t);
ans[q]=t;
p=q;
}
ans[p]=max(ans[p],solve(p+,R,d+)+);
res=max(res,ans[p]);
return res;
}
int main()
{
int N,M,L,R;
scanf("%d%d",&N,&M);
rep(i,,N) scanf("%d",&h[i]);
Log[]=-;
rep(i,,N) Log[i]=Log[i>>]+;
rep(i,,N) mx[][i]=i;
for(int i=;(<<i)<=N;i++)
for(int j=;j+(<<i)-<=N;j++)
mx[i][j]=Max(mx[i-][j],mx[i-][j+(<<(i-))]);
solve(,N,);
rep(i,,M){
scanf("%d%d",&L,&R);
if(h[L]<h[R]) swap(L,R);
if(!R) printf("%d\n",ans[L]);
else {
if(L==R) puts("");
else {
int p;
if(L<R) p=find(L+,R);
else p=find(R,L-);
if(h[p]>=h[L]) puts("");
else printf("%d\n",dep[R]-dep[L]);
}
}
}
return ;
}

Gym 102091A: Flying Squirrel(RMQ)的更多相关文章

  1. Gym - 100513B:Colored Blankets (构造)(存疑)

    题意:给定N的棒棒,K种颜色,每个棒棒的两端可以涂色.现在已知所有的线段要么有一端涂色,要么两端都没有涂色,现在要求把所有的没涂色的部分涂色,使得我们可以把涂色后的棒棒分为N/K组,每组的涂色情况相同 ...

  2. ST(RMQ)算法(在线)求LCA

    在此之前,我写过另一篇博客,是倍增(在线)求LCA.有兴趣的同学可以去看一看.概念以及各种暴力就不在这里说了,那篇博客已经有介绍了. 不会ST算法的同学点这里 ST(RMQ)算法在线求LCA 这个算法 ...

  3. ASP.NET Core中的依赖注入(1):控制反转(IoC)

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...

  4. ASP.NET Core中的依赖注入(2):依赖注入(DI)

    IoC主要体现了这样一种设计思想:通过将一组通用流程的控制从应用转移到框架之中以实现对流程的复用,同时采用"好莱坞原则"是应用程序以被动的方式实现对流程的定制.我们可以采用若干设计 ...

  5. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  6. 从零开始学Python第一周:Python基础(上)

    Python语法基础(上) 一,Python的变量 (1)创建变量 变量的含义:存储信息的地方 创建变量并赋值 x = 1 print x x = 123 #再次赋值 print x (2)使用变量 ...

  7. OpenStack 企业私有云的若干需求(2):自动扩展(Auto-scaling) 支持

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  8. C#进阶系列——DDD领域驱动设计初探(二):仓储Repository(上)

    前言:上篇介绍了DDD设计Demo里面的聚合划分以及实体和聚合根的设计,这章继续来说说DDD里面最具争议的话题之一的仓储Repository,为什么Repository会有这么大的争议,博主认为主要原 ...

  9. C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下)

    前言:上篇介绍了下仓储的代码架构示例以及简单分析了仓储了使用优势.本章还是继续来完善下仓储的设计.上章说了,仓储的最主要作用的分离领域层和具体的技术架构,使得领域层更加专注领域逻辑.那么涉及到具体的实 ...

随机推荐

  1. jetty隐藏版本号教程

    一.查看版本号 直接访问端口不像apache/tomcat/nginx会直接有版本号 但实际查看返回http头时还是带着版本号 二.隐藏版本号操作 编缉$JETTY_HOME/start.ini将je ...

  2. 把旧系统迁移到.Net Core 2.0 日记 (18) --JWT 认证(Json Web Token)

    我们最常用的认证系统是Cookie认证,通常用一般需要人工登录的系统,用户访问授权范围的url时,会自动Redirect到Account/Login,登录后把认证结果存在cookie里. 系统只要找到 ...

  3. 转:Java工程师成神之路~(2018修订版)

    转: http://www.hollischuang.com/archives/489 阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所 ...

  4. 学习笔记-AngularJs(二)

    在接下来学习angularjs中,我按照的就是之前 学习笔记-AngularJs(一)所讲的目录来搭建一个学习的项目,做一个互联网大佬人物简介的例子,当然也可以使用angualrjs上面提供的官方例子 ...

  5. centos6.5 安装PHP7.0支持nginx

    1.安装PHP所需要的扩展           yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel ...

  6. bzoj2330

    题解: 差分约束系统 要我们求最小值 显然就是转化为最长路 然后spfa一下即可 代码: #include<bits/stdc++.h> using namespace std; ; lo ...

  7. 【原创】<Debug> QT头文件

    [Error] No such file or directory [Solution] 参考: http://blog.csdn.net/donglynn/article/details/21804 ...

  8. Python3 线程/进程池 concurrent.futures

    python3之concurrent.futures一个多线程多进程的直接对接模块,python3.2有线程池了 Python标准库为我们提供了threading和multiprocessing模块编 ...

  9. flask项目结构(四)使用sqlalchemy和alembic

    简介 其实我不是啥正经人,错了,不是啥正经程序员,所能想到的估计也就码农一级吧,高级程序员,搞什么算法,什么人工智能,大数据计算…………离我还太遥远. 但是这并不妨碍我继续学习,继续写垃圾小程序. 反 ...

  10. CMOS集成门电路

    CMOS集成门电路:mos管构成的集成门电路 CMOS:互补对称金属氧化物半导体器件 CMOS反相器电路是由N沟道MOSFET和P沟道MOSFET互补而成:特点静态功耗近视为0,电源电压可在很宽的范围 ...