bzoj5288 [Hnoi2018]游戏

Posted wx62f0894128448

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj5288 [Hnoi2018]游戏相关的知识,希望对你有一定的参考价值。


​http://www.elijahqi.win/archives/3676​​​
有的时候随机并不一定不好 看怎么随机 wc吃亏 什么时候可以长记性

要不是在弱省早就退役了

记忆化一下之前搜索过的一些位置

然后每次不断拓展 把整个排列随机几次然后乱搞即可

#include<cstdio>
#include<cctype>
#include<algorithm>
using namespace std;
inline char gc()
static char now[1<<16],*S,*T;
if(T==S)T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;
return *S++;

inline int read()
int x=0,f=1;char ch=gc();
while(!isdigit(ch)) if (ch==-) f=-1;ch=gc();
while(isdigit(ch)) x=x*10+ch-0,ch=gc();
return x*f;

const int N=1e6+10;
int n,m,Q,b[N],L[N],R[N],p[N];
inline void gao(int x)
int l=x,r=x;
while(1)
if (l>1&&(!b[l-1]||b[l-1]>=l&&b[l-1]<=r))
--l;r=max(r,R[l]);l=min(L[l],l);
continue;

if (r<n&&(!b[r]||l<=b[r]&&b[r]<=r))
++r;l=min(L[r],l);r=max(r,R[r]);
continue;
break;
L[x]=l;R[x]=r;

int main()
freopen("bzoj5288.in","r",stdin);
srand(20010820);
n=read();m=read();Q=read();
for (int i=1;i<=m;++i) b[read()]=read();
for (int i=1;i<=n;++i) L[i]=n+1,p[i]=i;
for (int i=1;i<=5;++i) random_shuffle(p+1,p+n+1);
for (int i=1;i<=n;++i) gao(p[i]);
while(Q--)
int s=read(),t=read();
if (t<=R[s]&&t>=L[s]) puts("YES");else puts("NO");

return 0;


以上是关于bzoj5288 [Hnoi2018]游戏的主要内容,如果未能解决你的问题,请参考以下文章

bzoj千题计划310:bzoj5285: [Hnoi2018]寻宝游戏(思维题+哈希)

bzoj 3576: [Hnoi2014]江南乐

BZOJ3576: [Hnoi2014]江南乐

[BZOJ1188][HNOI2007]分裂游戏

BZOJ2732[HNOI2012]射箭 二分+半平面交

[bzoj2732][HNOI2012]射箭