【BZOJ5288】【HNOI2018】游戏(乱搞?)

题面

BZOJ

洛谷

题面自己到洛谷上看把

题解

考场上乱搞拿到了\(90\)分,简直不敢相信。

回家把代码再交了一份直接就\(AC\)了???

\(O(n^2)\)的做法应该很容易想

对于每个点作为起点,暴力向左右两侧拓展,

看看它能够到达的区间就行了。

考虑怎么优化一下,发现如果拓展的时候走到了一个已经拓展完的节点

那么一定能够到达这个点能够到达的左右位置

因此,直接沿着当前点能够到达的最远左右位置跳跃一下,

中间就不用计算了。

我们发现这样很容易卡成\(O(n^2)\)

于是我们倒着做,防止出题人故意卡正着做的

然后我就考场\(90\)分?洛谷/BZOJ AC了??

因为代码是考场代码,所以特别丑陋

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define RG register
#define MAX 1001000
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m,Q;
int L[MAX],R[MAX],K[MAX];
namespace Task1//20pts
{
void Calc(int x)
{
int l=x,r=x,len=0;
while(233)
{
len=r-l;
while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))--l;
while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))++r;
if(r-l==len)break;
}
L[x]=l;R[x]=r;
}
void Solve()
{
for(int i=1;i<=n;++i)Calc(i);
while(Q--)
{
int S=read(),T=read();
if(L[S]<=T&&T<=R[S])puts("YES");
else puts("NO");
}
}
}
namespace pf
{
void Calc1(int x)
{
int l=x,r=x,len=0;
while(233)
{
len=r-l;
while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))r=max(r,L[l-1]),l=L[l-1];
while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))++r;
if(r-l==len)break;
}
L[x]=l;R[x]=r;
}
void Calc2(int x)
{
int l=x,r=x,len=0;
while(233)
{
len=r-l;
while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))
{
--l;
//if(L[l])r=max(r,R[l]),l=L[l];
}
while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))l=min(l,R[r+1]),r=R[r+1];
if(r-l==len)break;
}
L[x]=l;R[x]=r;
}
void Solve()
{
//for(int i=1;i<=n/2;++i)Calc1(i);
for(int i=n;i>=1;--i)Calc2(i);
while(Q--)
{
int S=read(),T=read();
if(L[S]<=T&&T<=R[S])puts("YES");
else puts("NO");
}
}
} int main()
{
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
n=read();m=read();Q=read();
for(int i=1;i<=m;++i)
{
int x=read(),y=read();
K[x]=y;
}
if(n<=1000)Task1::Solve();
else pf::Solve();
return 0;
}

【BZOJ5288】[HNOI2018]游戏(乱搞?)的更多相关文章

  1. [BZOJ5288][HNOI2018]游戏(拓扑排序)

    传送门:https://www.luogu.org/problemnew/show/P4436 20分的暴力加一个Random_shuffle就A了.我还能说什么.. 不过这个也不是毫无道理,复杂度应 ...

  2. bzoj5288: [Hnoi2018]游戏

    我还是太年轻了... 考场上就是直接枚举预处理当前位置左右延伸到的最远距离,好像是水了20.. 然后噶爷爷居然随机一下就AC了????mengbier #include<cstdio> # ...

  3. 【BZOJ5288】[HNOI2018]游戏(拓扑排序)

    [BZOJ5288][HNOI2018]游戏(拓扑排序) 题面 BZOJ 洛谷 题解 去年省选的时候这题给我乱搞整过去整过去了,也是虐心了.... 所以当然是来讲正儿八经的正确做法啦. 很明显,我们需 ...

  4. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  5. 【bzoj3856】Monster 乱搞

    题目描述 你要打一只h点血的怪物,每回合你攻击会造成a点伤害,回合结束后怪物会回b点血,你每攻击k回合需要休息一次,该回合不能造成伤害.怪物血量降到0以下就会死亡,问最后能否打死怪物. 输入 Ther ...

  6. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  7. UVA 11853 [dfs乱搞]

    /* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...

  8. Codeforces 732e [贪心][stl乱搞]

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  9. 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

随机推荐

  1. js中call()方法和apply方法的使用

    1. 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  2. 卷积神经网络CNN在自然语言处理中的应用

    卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,从而掀起了深度学习在自然语言处理领域(Natural Language Process ...

  3. photoshop cc 2018安装破解教程(破解补丁,亲测,绝对可用)

    破解步骤说明:下载地址百度网盘,https://pan.baidu.com/s/1cWtpUesl2fms3tFwEC0MiQ 1.右键解压Adobe Photoshop CC 2018 64位这个文 ...

  4. Qt-QML-Loader初步接触

    先说说为什么用到了QML的Loader,这里我就要先扯点别的,那就是QML自带的ColorDialog,QML的机制 是优先调用系统提供的ColorDialog,如果系统的ColorDialog的不可 ...

  5. ReadyAPI创建功能测试的方法

    声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 在ReadyAPI中有多种方法可以创建功能测试,本篇将分步操作创建功能测试. 1.从So ...

  6. Java集合学习--集合总结

    一.ArrayList与Vector ArrayList与Vector很多地方大同小异,Vector现在已经基本不再使用.具体的管理如下:1.ArrayList与Vector都实现了List接口,底层 ...

  7. 正式放弃Edge,重新拥抱Chrome

    从Edge还叫斯巴达的时候我就开始用了,本来对浏览器的要求也没多高,能够打开多个选项卡,稳定,支持最新的规范就好了. 但是Edge真的是越来越让我失望了,卡死问题越来越多,崩溃越来越频繁,我也快奔溃了 ...

  8. Keil sct分散加载文件

    官方说明:http://www.keil.com/support/man/docs/armlink/armlink_pge1401393372646.htm

  9. POJ 2540 Hotter Colder(半平面交)

    Description The children's game Hotter Colder is played as follows. Player A leaves the room while p ...

  10. Check the string

    A has a string consisting of some number of lowercase English letters 'a'. He gives it to his friend ...