题目

瑟瑟发抖,这竟然只是个蓝题

题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\)。当收到一条指令\(x\)后,如果向\(D\)方向走\(x\)后距离\(D\)更近,那么就走;否则就停留在原地。

现在有\(Q\)次询问,第\(i\)次询问为\(q_i\),问能不能仅改变\(d_{q_i}\),使得其不能到达\(D\)点

考虑一个暴力,设\(g_{i,j}\)表示当\(D=j\)时,只使用后\(i\)次操作能否到达\(j\)点

考虑如何求出\(g_{i,j}\)

转移大概长这样

\[g_{i,j}=\left\{\begin{matrix}
g_{i+1,j-d_i} & d_i\leq j\\
g_{i+1,d_i-j} & j<d_i<2j\\
g_{i+1,j}&d_i\geq 2j
\end{matrix}\right.
\]

就是当\(d_i\leq j\)的时候,只能到达距离目标\(j-d_i\)的地方

当\(j<d_i<2j\),我们会走过\(j\)点,到达距离目标\(d_i-j\)的地方,这个时候翻转一下正方向即可

当\(d_i>2j\)的时候,显然走过去的点距离目标更远,于是直接不走

我们再处理出一个数组\(pos_i\)表示第\(i\)次操作后距离\(D\)点的距离

当遇到一个询问\(q_i\)的时候,如果我们要改变\(d_{q_i}\),那么可能我们只能改变为\(0\)到\(2\times pos_{i-1}\)的数,只有这些才是有效移动

进行有效移动后距离目标点的距离也只可能从\(pos_{i-1}\)到\(0\),所以只需要\(g_{q_i+1,0}\)到\(g_{q_i+1,pos_{i-1}}\)里有一个是\(0\),那么我们就可以走这个距离,之后就不可能走到目标点了

这样复杂度是\(O(nD)\)的,显然过不了

考虑一下如何不求\(g\)数组,而直接高效询问

发现我们一次询问只关注\(g_{q_i+1}\)的前\(pos_{i-1}\)项有没有一个\(0\),显然一个靠前的\(0\)能影响更多的询问

所以我们如果知道使得\(g_{i,j}=0\)最小的\(j\)在哪里,也能快速回答询问

设\(dp_i\)表示使得\(g_{i,j}=0\)最小的\(j\),考虑求出\(dp\)数组

根据上面\(g\)数组的转移,尝试反推\(dp\)数组的转移

当\(d_i\geq 2\times dp_{i+1}\)时,\(dp_{i}=dp_{i+1}\)。这对应了上面的第三个转移

当\(dp_{i+1}=d_i-j\),即\(dp_{i}=d_i-dp_{i+1}\)时,需要满足\(d_i-dp_{i+1}<d_i<2(d_i-dp_{i+1})\),即\(d_i>2\times dp_{i+1}\)时。这对应了第二个转移。

当\(dp_{i+1}=j-d_i\),即\(dp_i=dp_{i+1}+d_i\)时,需要满足\(d_i\leq dp_{i+1}+d_i\),这显然成立。这对应了上面第三个转移。

根据条件取上面三个转移的最小值即可,回答询问的时候只需要判断一下\(dp_{q_i+1}\)和\(pos_{q_{i-1}}\)的大小关系即可

代码

#include<bits/stdc++.h>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=5e5+5;
int d[maxn],dp[maxn],pos[maxn];
int n,D,Q;
inline int ABS(int x) {return x>=0?x:-x;}
int main() {
n=read();D=read();dp[n+1]=1;
for(re int i=1;i<=n;i++) d[i]=read();
for(re int i=n;i;--i) {
if(d[i]>=2*dp[i+1]) {
dp[i]=dp[i+1];
if(d[i]>2*dp[i+1]) dp[i]=min(dp[i],d[i]-dp[i+1]);
}
else dp[i]=dp[i+1]+d[i];
}
pos[0]=D;
for(re int i=1;i<=n;i++) pos[i]=min(ABS(pos[i-1]-d[i]),pos[i-1]);
Q=read();int x;
while(Q--) x=read(),puts(dp[x+1]<=pos[x-1]?"YES":"NO");
return 0;
}

【ARC072E】Alice in linear land的更多相关文章

  1. 【ARC072E】Alice in linear land DP

    题目大意 有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令.第\(i\)个指令为\(d_i\).他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当 ...

  2. 【ARC072 E】Alice in linear land

    被智商题劝退,告辞 题意 有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如 ...

  3. 【BZOJ3291】Alice与能源计划 二分图最大匹配

    [BZOJ3291]Alice与能源计划 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星 ...

  4. 【线性代数】1-1:线性组合(Linear Combinations)

    title: [线性代数]1-1:线性组合(Linear Combinations) toc: true categories: Mathematic Linear Algebra date: 201 ...

  5. 【arc072e】AtCoder Regular Contest 072 E - Alice in linear land

    题意 给定一个D,以及一个长度为N的序列a,顺序执行这些数字: 对于一个数字x,会使得D=min(D,abs(D-x)) 有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0. n,q ...

  6. ARC072E Alice in linear land

    ---题面--- 题解: 首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i]. 那么如果女巫可以修改第i ...

  7. 【XSY2190】Alice and Bob VI 树形DP 树剖

    题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...

  8. 【bzoj4730】 Alice和Bob又在玩游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=4730 (题目链接) 题意 给出一个森林,两个人轮流操作,每次把一个节点以及它的祖先全部抹去,无节点可 ...

  9. 【bzoj3291】Alice与能源计划 模拟费用流+二分图最大匹配

    题目描述 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系.火星上一共有N个居民点 ...

随机推荐

  1. VMProtect使用小计【二】 – 加壳查看

    Release 我这里使用的是Release的版本,Debug的版本分析没有多少的必要,因为程序发布过之后就是Release的,我们先看一下这个文件 原程序分析 使用OD打开VMProtectDemo ...

  2. Linux初始化的汇编代码

    1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局. 1: /* 2: * setup.ld 3: * 4: * Linker script ...

  3. 作用域 {}代码块 const修饰符 引用

    简单分为:全局作用域.局部作用域.语句作用域 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ::aver=20 #include<iostream> usin ...

  4. 引入scss(@import)和其中易错点

    1.引入文件方式 @import 'url'; ./ :当前目录 ../ :上级目录 src/api/styles: 绝对路径 2.一般在main.js中引用当做全局样式 import 'styles ...

  5. Java Jar Manifest

    JAR文件可以可选地在META-INF目录中包含名为MANIFEST.MF的Manifest文件.Manifest文件包含有关JAR文件及其条目的信息.Manifest文件可以包含有关JAR文件的CL ...

  6. 反射与类加载之ClassLoader与类加载器(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [动态代理模式] [Android ...

  7. <随便写>软件设计遵循的基本原则

    1.高内聚,低耦合 所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则. 所谓低耦合,是指一个软件系统内不同 ...

  8. centos yum 安装 tomcat

    1.安装 yum install tomcat 2.卸载 yum remove tomcat 3.地址映射 http://localhost:8080/ /usr/share/tomcat/webap ...

  9. Web开发常规调试方法与常见问题分析

    一.Web项目基本原理 现在的web项目大都已经前后端独立开发与部署. 前后端独立开发,一般是前端与后端通过web接口(常见的有RESTful与websocket)文档进行交流.前端开发人员先更具业务 ...

  10. Vue+element ui table 导出到excel

    需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...