【ARC072E】Alice in linear land DP
题目大意
有一个人要去直线上\(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的更多相关文章
- 【ARC072E】Alice in linear land
题目 瑟瑟发抖,这竟然只是个蓝题 题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\).当收到一条指令\(x\)后,如果向\(D\)方向走\( ...
- 【ARC072 E】Alice in linear land
被智商题劝退,告辞 题意 有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如 ...
- 【BZOJ3291】Alice与能源计划 二分图最大匹配
[BZOJ3291]Alice与能源计划 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星 ...
- 【线性代数】1-1:线性组合(Linear Combinations)
title: [线性代数]1-1:线性组合(Linear Combinations) toc: true categories: Mathematic Linear Algebra date: 201 ...
- 【题解】ARC101F Robots and Exits(DP转格路+树状数组优化DP)
[题解]ARC101F Robots and Exits(DP转格路+树状数组优化DP) 先删去所有只能进入一个洞的机器人,这对答案没有贡献 考虑一个机器人只能进入两个洞,且真正的限制条件是操作的前缀 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- 【CF506E】Mr. Kitayuta's Gift dp转有限状态自动机+矩阵乘法
[CF506E]Mr. Kitayuta's Gift 题意:给你一个字符串s,你需要在s中插入n个字符(小写字母),每个字符可以被插在任意位置.问可以得到多少种本质不同的字符串,使得这个串是回文的. ...
- 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP
[BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...
- UOJ #17. 【NOIP2014】飞扬的小鸟 背包DP
#17. [NOIP2014]飞扬的小鸟 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:// ...
随机推荐
- 一、Xadmin------安装
翻译:http://xadmin.readthedocs.io/en/docs-chinese 1.安装方法: 1)pip install django-xadmin 2)通过源文件安装,我是通过这种 ...
- 工作时间看股票:采用Excel RTD技术获取和讯网的实时股票行情及深沪港最新指数
本文地址:http://www.cnblogs.com/Charltsing/p/RTD.html QQ:564955427 在Excel里面获取实时数据大概有几种方式:1.定时器+函数2.DDE3. ...
- MySQLl导入导出SQL文件
window 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql ...
- MySQL导出数据,并转存到Excel表格中
从数据库中导出数据的方法,这里就不提了,网上有很多方法,如果闲麻烦,可以看一下这个:mysql导出数据 其实使用最简单的下面这个语句: mysql > select * from demo in ...
- 【转帖】介绍 .NET Standard
[译]介绍 .NET Standard https://zhuanlan.zhihu.com/p/24267356 跟开发争执过 自己不会写代码 的确不好. 若有任何对翻译的建议,烦请指正 有任何问题 ...
- jQuery EasyUI 选项卡面板tabs使用实例精讲
1. 对选项卡面板区域 div 设置 class=”easyui-tabs” 2. 对选项卡面板区域添加多个 div,每个 div 就是一个选项卡(每个面板一定设置 title) 3. 设置面板 fi ...
- redis 中主从、哨兵和集群分片模式这三个有什么区别 ?
集群分片 比如 5主5从,也就是说 数据过来之后会均匀的分配到5台服务器上面,5台服务器上面的数据是不同的,但是每个服务器都有一个从服务器,上面的数据跟这一台主服务器的数据是一样的: 也就是说,对于这 ...
- python数学第四天【古典概型】
- Navicat软件安装
Navicat_10.1.7永久注册码 NAVH-WK6A-DMVK-DKW3
- QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装
0 安装qtp .exe 文件 安装 插件文件(如delph) 1 关闭 启动程序: 将要操作的程序-存入localdatatable中 设置 迭代一次 rem SystemUtil.ClosePro ...