题目描述

https://lydsy.com/JudgeOnline/upload/201804/%E6%B9%96%E5%8D%97%E4%BA%8C%E8%AF%95%E8%AF%95%E9%A2%98.pdf

题解

这道题其实是让我们对于每个位置,求出它的一个合法区间。

先考虑如果所有的限制都满足y<=x的限制,说明如果我们如果从一个点出发,就不用来回跑腿了,直接一路向右走就好了。

那么这时对于每个点,它能扩展到的最左的点就是他向左遇到的第一个门,至于右端点,我们可以倒着扫描一个序列,维护一个栈,如果栈顶在当前是可达的,那么我们就把它弹掉,因为这个点在任何时候度不会成为端点了。

如何解释?要么这个点在将来也可以被通过,要么存在比它更靠前的一个点变成右端点。

然后这样是O(n)的。

如果我们这个限制,我们不能直接卡出左端点,可以考虑边界条件,先卡出一个满足没有y<=x的左端点,这是里面所有的限制都是y>x的,那么不可达的情况就是y大于当前的右端点,所以我们要找到的就是最靠右的满足前面那个条件的点。

这个用线段树维护,结合前面的栈可以做到O(nlogn)。

代码

#include<iostream>
#include<cstdio>
#define N 1000002
using namespace std;
int n,m,q,tr[N<<],key[N],st[N],lim[N],top,l[N],r[N];
inline int rd(){
int x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
int work(int cnt,int l,int r,int x){
if(tr[cnt]<=x)return ;
if(l==r)return l;
int mid=(l+r)>>;
if(tr[cnt<<|]>x)return work(cnt<<|,mid+,r,x);
else return work(cnt<<,l,mid,x);
}
int query(int cnt,int l,int r,int L,int R,int x){
if(l>=L&&r<=R)return work(cnt,l,r,x);
int mid=(l+r)>>,ans=;
if(mid<R)ans=query(cnt<<|,mid+,r,L,R,x);
if(ans)return ans;
if(mid>=L)ans=query(cnt<<,l,mid,L,R,x);
return ans;
}
void build(int cnt,int l,int r){
if(l==r){tr[cnt]=key[l];return;}
int mid=(l+r)>>;
build(cnt<<,l,mid);build(cnt<<|,mid+,r);
tr[cnt]=max(tr[cnt<<],tr[cnt<<|]);
}
inline int solve(int l,int r,int x){
if(l>r)return l;
int pos=query(,,n,l,r,x);
if(!pos)return l;else return pos+;
}
int main(){
n=rd();m=rd();q=rd();int x,y;
for(int i=;i<=m;++i){
x=rd();y=rd();
key[x]=y;
}
build(,,n);
lim[]=;
for(int i=;i<=n;++i)lim[i]=(key[i-]&&key[i-]<=i-)?i:lim[i-];
key[n]=n+;
for(int i=n;i>=;--i){
l[i]=r[i]=i;
l[i]=solve(lim[i],i-,r[i]);
st[++top]=i;
while(top&&((key[st[top]]>=l[i]&&key[st[top]]<=r[i])||(!key[st[top]]))){
--top;
r[i]=st[top];
l[i]=solve(lim[i],i-,r[i]);
}
}
while(q--){
x=rd();y=rd();
if(l[x]<=y&&y<=r[x])puts("YES");
else puts("NO");
}
return ;
}

[HNOI/AHOI2018]游戏的更多相关文章

  1. 【题解】Luogu P4436 [HNOI/AHOI2018]游戏

    原题传送门 \(n^2\)过百万在HNOI/AHOI2018中真的成功了qwqwq 先将没门分格的地方连起来,枚举每一个块,看向左向右最多能走多远,最坏复杂度\(O(n^2)\),但出题人竟然没卡(建 ...

  2. [洛谷P4436] HNOI/AHOI2018 游戏

    问题描述 一次小G和小H在玩寻宝游戏,有n个房间排成一列,编号为1,2,...,n,相邻的房间之间都有一道门.其中一部分门上锁(因此需要有对应的钥匙才能开门),其余的门都能直接打开.现在小G告诉了小H ...

  3. BZOJ5288 HNOI/AHOI2018游戏

    首先将之间没有锁的房间合并.显然可达性具有传递性和反交换律(即若a能到达b,则b不能到达a). 考虑对每个房间找到其左右第一个(即与其最接近的)能作为起点到达它的房间.如果能求出这个,对此建两棵树,问 ...

  4. BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ...

  5. Luogu P4436 [HNOI/AHOI2018]游戏

    题目 我们要求出\(l_i,r_i\)表示\(i\)最远能够到达的最左边和最右边的格子. 首先有一个比较简单的暴力,就是每次我们选择一个格子,然后从当前格子开始往左右暴力扩展,找到能够到达的最远的格子 ...

  6. [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)

    P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ...

  7. [HNOI/AHOI2018]转盘(线段树优化单调)

    gugu  bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ...

  8. 【LG4437】[HNOI/AHOI2018]排列

    [LG4437][HNOI/AHOI2018]排列 题面 洛谷 题解 题面里这个毒瘤的东西我们转化一下: 对于\(\forall k,j\),若\(p_k=a_{p_j}\),则\(k<j\). ...

  9. 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...

随机推荐

  1. .net core jwt 入门记录

    从百度里搜索里搜索了很多jwt的文章,跟着文章写了一个demo,这里记录下学习过程中碰上的问题.看文章多遍,不如手工实现一次. 模板已上传到github.com:dogvane/webapi_jwt_ ...

  2. es6之字符串添加的东西

    在es6里边对字符串添加了一些东西! 字符串模板(非常友善) 相信大家之前都遇到过万恶的字符串拼接,真是噩梦,不过之后有了字符串模板之后,再也不用担心字符串拼接会乱了... 之前的字符串拼接 let ...

  3. Web前端-Ajax基础技术(上)

    Web前端-Ajax基础技术(上) ajax是浏览器提供一套的api,用于向服务器发出请求,接受服务端返回的响应,通过javascript调用,实现通过代码控制请求与响应,实现网络编程. ajax发送 ...

  4. 一、Snapman多人协作电子表格之——Snapman自我介绍

    一.Snapman系统介绍 Snapman是一个真正现代化的电子表格系统:QQ是即时通讯软件,那Snapman就是一个即时工作系统. 微软CEO纳德拉说:Excel才是微软最伟大的产品,Excel将所 ...

  5. (办公)mysql安装完,只能通过localhost访问,而不能通过本机ip访问.(转)

    GRANT ALL PRIVILEGES ON *.* TO '; 这里面*.*代表是所有库.所有表,root是用户名,%代表所有ip都可访问,也可指定ip访问,例如'root'@'172.17.5. ...

  6. RabbitMQ for Mac OS Install

    使用brew来安装 RabbitMQ brew install rabbitmq 执行看到如下命令: Updating Homebrew... ==> Auto-updated Homebrew ...

  7. Go 定时任务

    本文基于Golang Crontab 实现了一个Crontab Job Manager.更加容易使用,同时也能够满足更加复杂的场景. 仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬. 需求 在开发 ...

  8. UI自动化测试之Jenkins配置

    前一段时间帮助团队搭建了UI自动化环境,这里将Jenkins环境的一些配置分享给大家. 背景: 团队下半年的目标之一是实现自动化测试,这里要吐槽一下,之前开发的测试平台了,最初的目的是用来做接口自动化 ...

  9. 放下VS2010,拥抱VS2019

    VS2019 再过几天就要正式发布了,我们还在使用 VS2010 进行软件开发.由于所处行业环境及项目类型,加之之前的代码积累,所以即使不用新的开发环境.新的语言技术也能比较好的完成工作.那究竟要不要 ...

  10. DevOps时代,企业数字化转型需要强大的工具链

    伴随时代的飞速进步,中国的人口红利带来了互联网业务的快速发展,巨大的流量也带动了技术的不断革新,研发的模式也在不断变化.传统企业纷纷效仿互联网的做法,结合DevOps进行数字化的转型. 通常提到Dev ...