题目大意

  有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令。第\(i\)个指令为\(d_i\)。他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当前离目的地更近,就会向前移动\(xm\),否则什么都不会做。

  现在,给你\(q\)个询问,第\(i\)个询问为\(a_i\),问你能不能改变\(d_{a_i}\),使得这个人不能到达目的地。你可以决定把\(d_{a_i}\)改成什么数。

  \(n,q\leq 500000,1\leq d_i\leq {10}^9\)

题解

  首先我们先算出执行前面\(i\)个指令后离终点的距离\(c_i\)

  暴力的做法是用DP算出\(g_{i,j}\):执行后面\(i\)~\(n\)的指令,离终点的距离为\(j\),执行完后能不能到达终点。

  然后就会发现一旦出现一个\(0\),后面的\(1\)就会无意义。(因为可以修改成直接走到\(0\)这里)

  那么我们只需要维护前面有多少个\(1\)。

  \(f_i\)表示执行后面\(i\)$n$的指令,前面$g_{i,0}$\(g_{0,f_i}\)全部是\(1\),\(g_{i,f_i+1}\)是\(0\)。

  那么如果\(d_i\leq 2f_{i+1}+1\),那么\(f_i=f_{i+1}+d_i\)。否则\(f_i=f_{i+1}\)。

  可以发现,第一种情况\(0\)~\(f_i\)之间不会有空洞。

  询问\(a_i\)时直接判断\(c_{a_i-1}\)是不是比\(f_{a_i+1}\)大。这样直接走到\(f_{a_i+1}+1\)就可以了。

  时间复杂度:\(O(n)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int n,q;
ll m;
ll d[500010];
ll c[500010];
ll f[500010];
void rd(int &s)
{
int c;
while((c=getchar())<'0'||c>'9');
s=c-'0';
while((c=getchar())>='0'&&c<='9')
s=s*10+c-'0';
}
void rd(ll &s)
{
int c;
while((c=getchar())<'0'||c>'9');
s=c-'0';
while((c=getchar())>='0'&&c<='9')
s=s*10+c-'0';
}
int abs(int x)
{
return x>0?x:-x;
}
void yes()
{
putchar('Y');
putchar('E');
putchar('S');
putchar('\n');
}
void no()
{
putchar('N');
putchar('O');
putchar('\n');
}
int main()
{
#ifdef DEBUG
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
scanf("%d%lld",&n,&m);
int i;
ll x;
c[0]=m;
for(i=1;i<=n;i++)
{
rd(d[i]);
c[i]=min(c[i-1],abs(c[i-1]-d[i]));
}
f[n+1]=0;
for(i=n;i>=1;i--)
{
f[i]=f[i+1];
if(d[i]<=2*f[i+1]+1)
f[i]=max(f[i],f[i+1]+d[i]);
}
scanf("%d",&q);
for(i=1;i<=q;i++)
{
rd(x);
if(c[x-1]>f[x+1])
yes();
else
no();
}
return 0;
}

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

  1. 【ARC072E】Alice in linear land

    题目 瑟瑟发抖,这竟然只是个蓝题 题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\).当收到一条指令\(x\)后,如果向\(D\)方向走\( ...

  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. 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)

    [题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...

  6. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  7. 【CF506E】Mr. Kitayuta's Gift dp转有限状态自动机+矩阵乘法

    [CF506E]Mr. Kitayuta's Gift 题意:给你一个字符串s,你需要在s中插入n个字符(小写字母),每个字符可以被插在任意位置.问可以得到多少种本质不同的字符串,使得这个串是回文的. ...

  8. 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP

    [BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...

  9. UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP

    #17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:// ...

随机推荐

  1. mysql 库 行 列的 操作使用

    -----------------------------------------------------------------------------时间不等你,下一刻,全是新的.每一刻都让它变得 ...

  2. PyQuery库

    '''强大又灵活的网页解析库.如果你觉得正则写起来太麻烦,又觉得BeautifulSoup语法太难记,如果你熟悉jQuery的语法,那么PyQuery就是你的绝佳选择.'''from pyquery ...

  3. iOS UICollectionView 在滚动时停在某个item位置上

    方法一:实现UIScrollView的代理,然后实现下面这个方法 #pragma mark - UIScrollViewDelegate//预计出大概位置,经过精确定位获得准备位置- (void)sc ...

  4. Python_守护进程、锁、信号量、事件、队列

    1.创建进程 守护进程(*****) _.daemon = True #  _进程成为守护进程 守护进程也是一个子进程. 主进程的<代码>执行结束之后守护进程自动结束. import ti ...

  5. 搭建RISC-V错误记录

    错误:riscv64-unknown-elf-gcc: Command not found 解决办法:将riscv64-unknown-elf-gcc文件拷贝到根目录的/bin目录下. 原因是make ...

  6. linux和sqlserver 2017的安装

    这两天一直在弄linux的安装过程.中间也遇到了不少的坑,主要是网络上的坑人的文章太多.都是坑,最后从redhat官网下载了iso文件,顺便看到官网推荐了一个fedora media writer的烤 ...

  7. Linux 下面RPM 安装的SQLSERVER 修改字符集的方法

    1. 自己还是太low 2. 遇到问题 先 -h 处理 3. 发现登录报错, 怀疑是字符集的问题: 4. 计划是修改字符集 到 自己的环境可用的状态 使用命令 /opt/mssql/bin/mssql ...

  8. CLOUD常用表

    采购采购订单(t_PUR_POOrder, t_PUR_POOrderEntry)-收料通知单(T_PUR_Receive,T_PUR_ReceiveEntry)-采购入库单(T_STK_INSTOC ...

  9. vue前端框架面试问题汇总

    1.active-class是哪个组件的属性?嵌套路由怎么定义?答:vue-router模块的router-link组件. 2.怎么定义vue-router的动态路由?怎么获取传过来的动态参数? 答: ...

  10. 简单JQuery+AJAX+Servlet的计算器实现

    index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...