[HNOI/AHOI2018]游戏
题目描述
题解
这道题其实是让我们对于每个位置,求出它的一个合法区间。
先考虑如果所有的限制都满足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]游戏的更多相关文章
- 【题解】Luogu P4436 [HNOI/AHOI2018]游戏
		原题传送门 \(n^2\)过百万在HNOI/AHOI2018中真的成功了qwqwq 先将没门分格的地方连起来,枚举每一个块,看向左向右最多能走多远,最坏复杂度\(O(n^2)\),但出题人竟然没卡(建 ... 
- [洛谷P4436] HNOI/AHOI2018 游戏
		问题描述 一次小G和小H在玩寻宝游戏,有n个房间排成一列,编号为1,2,...,n,相邻的房间之间都有一道门.其中一部分门上锁(因此需要有对应的钥匙才能开门),其余的门都能直接打开.现在小G告诉了小H ... 
- BZOJ5288 HNOI/AHOI2018游戏
		首先将之间没有锁的房间合并.显然可达性具有传递性和反交换律(即若a能到达b,则b不能到达a). 考虑对每个房间找到其左右第一个(即与其最接近的)能作为起点到达它的房间.如果能求出这个,对此建两棵树,问 ... 
- BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解
		https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ... 
- Luogu P4436 [HNOI/AHOI2018]游戏
		题目 我们要求出\(l_i,r_i\)表示\(i\)最远能够到达的最左边和最右边的格子. 首先有一个比较简单的暴力,就是每次我们选择一个格子,然后从当前格子开始往左右暴力扩展,找到能够到达的最远的格子 ... 
- [Bzoj5285][洛谷P4424][HNOI/AHOI2018]寻宝游戏(bitset)
		P4424 [HNOI/AHOI2018]寻宝游戏 某大学每年都会有一次Mystery Hunt的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新生 ... 
- [HNOI/AHOI2018]转盘(线段树优化单调)
		gugu bz lei了lei了,事独流体毒瘤题 一句话题意:任选一个点开始,每个时刻向前走一步或者站着不动 问实现每一个点都在$T_i$之后被访问到的最短时间 Step 1 该题可证: 最优方案必 ... 
- 【LG4437】[HNOI/AHOI2018]排列
		[LG4437][HNOI/AHOI2018]排列 题面 洛谷 题解 题面里这个毒瘤的东西我们转化一下: 对于\(\forall k,j\),若\(p_k=a_{p_j}\),则\(k<j\). ... 
- 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)
		题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ... 
随机推荐
- 从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包
			wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前 ... 
- OPP的三大特征之封装总结
			'''封装: 1.什么是封装? 封装是把什么东西装到容器中,再封闭起来 与隐藏有相似之处,但不是单纯的隐藏 官方解释:封装是指对外部隐藏实现细节,并提供简单的使用接口 封装的好处: 1.提高安全性 2 ... 
- vue element-ui 文件上传
			<el-upload class="upload-demo" action="" :before-remove="beforeRemove&qu ... 
- Linux硬盘文件分析取证(SSH过的IP)
			在线靶场: https://www.mozhe.cn 背景介绍 某运维人员发现服务器最近被一个IP连接过SSH,请找到连接服务器SSH的IP. 实训目标 1.了解Linux备份方式: 2.了解Acce ... 
- 四款让你绝对上瘾的手机APP 用一次就会爱不释手
			如今我们出门在外,无时无刻不都在使用手机,在外游玩吃饭.乘地铁公交.购物逛街等,只要有手机不需要现金就可以完成这些事情,手机功能我们每天都在使用着,不用多说,大家都知道手机的重要性. 下面就是分享福利 ... 
- android 记一次解决键盘遮挡问题
			文章链接:https://mp.weixin.qq.com/s/1gkMtLu0BTXOUOj6isDjUw 日常android开发过程中,会遇到编辑框输入内容弹出软键盘,往往会出现键盘遮挡内容,或者 ... 
- DVWA 黑客攻防演练(十一) 存储型 XSS 攻击 Stored Cross Site Scripting
			上一篇文章会介绍了反射型 XSS 攻击.本文主要是通过 dvwa 介绍存储型 XSS 攻击.存储型 XSS 攻击影响范围极大.比如是微博.贴吧之类的,若有注入漏洞,再假如攻击者能用上一篇文章类似的代码 ... 
- 基于GitLab的Code Review教程
			一.前言 1.本文主要内容 GitLab Code Review机制说明 Git Workflow 与 Git Code Review Workflow GitLab Code Review 配置说明 ... 
- Powershell-远程操作
			1. 查看WinRM是否开启 Get-Service WinRM 2. Enable-PSRemoting –Force 3. 进行信任设置: Set-Item wsman:\localhost\cl ... 
- AngularJS学习之旅—AngularJS 模块(十五)
			一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ... 
