【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. IO 转换流

    package TestIo; import java.io.*; /** * 转换流 */ public class TestConvertStream { public static void m ...

  2. Selenium自动化测试基础

    如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...

  3. JVM监控远程服务器

    1. 首先配置服务器端,进入服务器tomcat的bin目录下,打开catalina.sh配置文件,xxx为服务器配置路径. # cd /xxx/apache-tomcat-/bin # vim cat ...

  4. Siki_Unity_2-1_API常用方法和类详细讲解(下)

    Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...

  5. 下落的树叶 (The Falling Leaves UVA - 699)

    题目描述: 原题:https://vjudge.net/problem/UVA-699 题目思路: 1.依旧二叉树的DFS 2.建树过程中开个数组统计 //紫书源代码WA AC代码: #include ...

  6. 火狐metamask账号

    火狐metamask lock trophy pyramid sunny aim inmate body sense sing castle cinnamon cram

  7. C#调用mingw的so库时无法加载DLL###.so 找不到指定的模块

    使用C#调用mingw的so,报了c# 无法加载DLL“###.so”,: 找不到指定的程序. (异常来自 HRESULT:0x8007007E)开始以为是dll路径问题,使用全路径确认正确后仍然无法 ...

  8. 【python】scrapy相关

    目前scrapy还不支持python3,python2.7与python3.5共存时安装scrapy后,执行scrapy后报错 Traceback (most recent call last): F ...

  9. 如何做好FAE工作及FAE职位发展

    此文较长,是作者对于半导体FAE职业的一些总结,码字不容易,耐心的阅读,欢迎点赞. 曾经认识一位做电源研发的工程师,转行在一家代理商做FAE,做了一年半以后,就提出了离职请求,他老板问他是什么原因,他 ...

  10. 将代码上传到GitHub

    网上看了很多资料,都是用的命令行,比较难看懂,自己摸索了一下怎么样在图形界面上操作.下面记录的只是简单的如何把本地仓库直接上传到服务器上. 在mac上下载个GitHub Mac客户端,安装好后运行,输 ...