【比赛】HNOI2018 游戏


考试的时候线段树区间查询的return条件打成了l==r。。。。于是光荣爆20(线段树都不会打了?)
看膜博士的题解
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=1000000+10,inf=0x3f3f3f3f;
int n,m,p,lmtL[MAXN],lmtR[MAXN],L[MAXN],R[MAXN],key[MAXN],stack[MAXN],cnt;
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
#define Mid ((l+r)>>1)
#define ls rt<<1
#define rs rt<<1|1
#define lson ls,l,Mid
#define rson rs,Mid+1,r
struct Segment_Tree{
int Mx[MAXN<<2];
inline void PushUp(int rt)
{
Mx[rt]=max(Mx[ls],Mx[rs]);
}
inline void Build(int rt,int l,int r)
{
if(l==r)Mx[rt]=key[l];
else Build(lson),Build(rson),PushUp(rt);
}
inline int Mxquery(int rt,int l,int r,int k)
{
if(Mx[rt]<=k)return 0;
if(l==r)return l;
else
{
if(Mx[rs]>k)return Mxquery(rson,k);
else return Mxquery(lson,k);
}
}
inline int Psquery(int rt,int l,int r,int L,int R,int k)
{
if(L<=l&&r<=R)return Mxquery(rt,l,r,k);
int res=0;
if(R>Mid)res=Psquery(rson,L,R,k);
if(res)return res;
if(L<=Mid)res=Psquery(lson,L,R,k);
return res;
}
inline int Query(int L,int R,int k)
{
if(R<L)return L;
int res=Psquery(1,1,n,L,R,k);
return res?res+1:L;
}
};
Segment_Tree T;
#undef Mid
#undef ls
#undef rs
#undef lson
#undef rson
inline void init()
{
T.Build(1,1,n);
for(register int i=1;i<=n;++i)
if(key[i-1]&&key[i-1]<=i-1)lmtL[i]=i;
else lmtL[i]=lmtL[i-1];
for(register int i=n;i>=1;--i)
if(key[i]&&key[i]>i)lmtR[i]=i;
else lmtR[i]=lmtR[i+1];
for(register int i=n;i>=1;--i)
{
L[i]=R[i]=i;
L[i]=T.Query(lmtL[i],L[i]-1,R[i]);
stack[++cnt]=i;
while(cnt&&((L[i]<=key[stack[cnt]]&&key[stack[cnt]]<=R[i])||(!key[stack[cnt]])))
{
R[i]=stack[--cnt];
L[i]=T.Query(lmtL[i],L[i]-1,R[i]);
}
}
}
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
read(n);read(m);read(p);
for(register int i=1;i<=m;++i)
{
int x,y;
read(x);read(y);
key[x]=y;
}
key[0]=-inf,key[n]=inf;
init();
while(p--)
{
int s,t;
read(s);read(t);
if(L[s]<=t&&t<=R[s])puts("YES");
else puts("NO");
}
return 0;
}
【比赛】HNOI2018 游戏的更多相关文章
- 【BZOJ5288】[HNOI2018]游戏(拓扑排序)
[BZOJ5288][HNOI2018]游戏(拓扑排序) 题面 BZOJ 洛谷 题解 去年省选的时候这题给我乱搞整过去整过去了,也是虐心了.... 所以当然是来讲正儿八经的正确做法啦. 很明显,我们需 ...
- 5288: [Hnoi2018]游戏
5288: [Hnoi2018]游戏 链接 分析: 考虑y<=x的怎么做,那么只能从左边走到右边.我们可以从最右边的点开始,一次确定每个点往右边可以走多少. L[x],R[x]分别是x向左向右最 ...
- 【BZOJ5288】[HNOI2018]游戏(乱搞?)
[BZOJ5288][HNOI2018]游戏(乱搞?) 题面 BZOJ 洛谷 题面自己到洛谷上看把 题解 考场上乱搞拿到了\(90\)分,简直不敢相信. 回家把代码再交了一份直接就\(AC\)了??? ...
- bzoj 5288: [Hnoi2018]游戏
Description Solution 乱搞能A的题,毁我青春 记忆化一下扩展过程 只要不是从 \(1\) 枚举到 \(n\) 去扩展都可以 \(AC\) 于是 \(random\_shuffle\ ...
- BZOJ.5288.[AHOI/HNOI2018]游戏(思路 拓扑)
BZOJ LOJ 洛谷 考虑如何预处理每个点能到的区间\([l,r]\). 对于\(i,i+1\)的一扇门,如果钥匙在\(i\)的右边,连边\(i\to i+1\),表示从\(i\)出发到不了\(i+ ...
- [HNOI2018]游戏[拓扑排序]
题意 题目链接 分析 先将没有锁的房间缩点,首先有一个 \(O(n^2)\) 的想法:从每个点出发,每次检查能否向两边扩张. 容易发现门和门之间如果有锁,必然只有一方能够开锁(只有一把钥匙),并且能够 ...
- [BZOJ5288][HNOI2018]游戏(拓扑排序)
传送门:https://www.luogu.org/problemnew/show/P4436 20分的暴力加一个Random_shuffle就A了.我还能说什么.. 不过这个也不是毫无道理,复杂度应 ...
- bzoj5288: [Hnoi2018]游戏
我还是太年轻了... 考场上就是直接枚举预处理当前位置左右延伸到的最远距离,好像是水了20.. 然后噶爷爷居然随机一下就AC了????mengbier #include<cstdio> # ...
- # HNOI2012 ~ HNOI2018 题解
HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...
随机推荐
- iOS 影音新格式 HEIF HEVC
苹果在 iOS 11 的发布会上,推出了两种新的媒体格式 HEIF HEVC,都是为了保证画质的情况下,大大减少视频.照片的大小. 一.简介 HEVC全称 High Efficiency Video ...
- 通过redis实现session共享-php
<?php class redisSession{ /** * 保存session的数据库表的信息 */ private $_options = array( 'handler' => n ...
- phpcms 的模板更换
刚安装完成后的phpcms ,自带的默认模板样式一般,可以自己换模板 首先打开phpcms文件夹,按照下图路径打开 default是存模板的文件夹 在里面新建一个文件夹 在default中主要用到的是 ...
- MySQL数据库之单双表查询
单表查询 先创建表 #创建表 create table employee( id int not null unique auto_increment, name varchar(20) not nu ...
- python基础数据类型补充
python_day_7 一. 今日主要内容: 1. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把 ...
- stl源码分析之vector
上篇简单介绍了gcc4.8提供的几种allocator的实现方法和作用,这是所有stl组件的基础,容器必须通过allocator申请分配内存和释放内存,至于底层是直接分配释放内存还是使用内存池等方法就 ...
- Appium+python 自动发送邮件(2)(转)
(原文:https://www.cnblogs.com/fancy0158/p/10056418.html) 移动端执行完测试case之后,通过邮件自动发送测试报告.大体流程如下: 1.通过unitt ...
- Windows10 Oracle ODBC安装配置
项目紧迫,需在短时间内交付成果,新团队成员,吐嘈之前数据库设计太low,很难看懂数据库表结构间的关系,为了使新同事更好的了解数据库表结构,特意使用powerDesigner对oracle.mysql数 ...
- 关于js中一个对象当做参数传递是按值传递还是按引用传递的个人看法
在<JavaScript高级程序设计>这本书中有这样一段话:有很多开发人员错误的认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明参数是按引用传递的.换句话说,尼古拉认为当一个 ...
- 【转】nodeJs学习之项目结构
新建的项目结构应该是这样 bin:项目的启动文件,也可以放其他脚本. node_modules:用来存放项目的依赖库. public:用来存放静态文件(css,js,img). routes:路由控制 ...