【ARC072 E】Alice in linear land
被智商题劝退,告辞
题意
有一个人在一条数轴的距离原点为 \(D\) 的位置,他可以执行 \(n\) 次操作,每次操作为给定一个整数 \(d_i\),这个人向原点的方向走 \(d_i\) 个单位,但如果走 \(d_i\) 个单位后他离原点的距离更远了,他就不会执行这个操作。
有 \(q\) 次询问,每次询问给定一个 \(y\),询问能否将 \(d_y\) 修改为 \([0,\infty)\) 内的整数(注意可以改成 \(0\)),使得这个人执行 \(n\) 次操作后到不了原点。询问之间互相独立,即每次单点修改都是在原序列的基础上修改。
\(n\le 5\times 10^5\)
\(1\le d_i,D\le 10^9\)
题解
预处理出 \(y=1\cdots n\) 的答案。
考虑单点修改的实质:设 \(sum_i\) 表示执行完前 \(i-1\) 次操作后人的位置,询问是否存在一个到原点距离为 \(d_i\in [0,sum_{i-1}]\) 的整点,使得从该点出发进行第 \(i+1\) 到 \(n\) 次操作后这个人到不了终点。
因为本题的操作带条件,所以不能修改中间的某个操作。
但是我们可以预处理出 \(b_i\) 表示执行第 \(i\) 到 \(n\) 个操作后到达原点的最大出发位置(即到原点距离最远的位置)。
显然,答案是 yes 当且仅当 \(a_{y-1}\gt b_{y+1}\)(因为做一次操作只会使人到原点的距离变小或不变)。
那怎么预处理 \(b_i\) 呢?
构造一个函数 \(f(i)\) 表示人从距离原点为 \(i\) 的位置出发,执行一个参数为 \(k\) 的操作,到达距离原点 \(f(i)\) 的位置。
\(k\) 任取一个数 \(9\),则把函数 \(f\) 打表
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | \(\cdots\)
-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
y | 1 | 2 | 3 | 4 | 4 | 3 | 2 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | \(\cdots\)
搬用官方题解的 \(x,y\) 图象(横轴是 \(x\),纵轴是 \(y\))

但我们可以通过修改 \(d_i\) 来得到 \([0,sum_{i-1}]\) 中的任意整数,所以我们把整个区间 \([0,i]\) 作为一个新函数 \(F\) 的自变量,\(F(i)\) 表示人从一个可能位于的区间 \([0,i]\) 出发,执行一个参数为 \(k\) 的操作,能到达的区间为 \([0,F(i)]\)。显然,\(F(i)\le i\),即人可能位于的区间随着操作的增加而缩小。
这里写一下 \(F(i)\) 的等式:\(F(i)=\min(i,\max(i-k,\lfloor \frac{k}{2}\rfloor))\)
观察定义,还可以发现 \(F(i)\) 实际上就是 \(\max(f(j)\space |\space j\in [1,i])\)。
依然取 \(k\) 为 \(9\),把函数 \(F\) 打表
x | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | \(\cdots\)
-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
y | 1 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | \(\cdots\)
因为 \(b_{n+1}=0\),所以 \(b\) 数组可以倒推。现在我们考虑从某一个区间撤回一次操作所返回的区间。
设 \(F\) 的逆函数 \(G(i)\) 表示人从一个可能位于的区间 \([0,i]\) 撤回一个参数为 \(k\) 的操作,能到达的最大区间(因为我们要求 \(b_i\) 是合法的最大出发位置)。
观察函数 \(F\) 的表可得 $$G(i) = \begin{cases} i &(i\le \lfloor\frac{k}{2}\rfloor) \ i+k &(i\gt \lfloor\frac{k}{2}\rfloor) \end{cases}$$
于是倒推出 \(b\) 数组即可,根据 \(a_{y-1}\gt b_{y+1}\) 判断 yes / no 就行了。
复杂度 \(O(n)\)。
#include<bits/stdc++.h>
#define ll long long
#define N 500005
using namespace std;
inline ll read(){
ll x=0; bool f=1; char c=getchar();
for(;!isdigit(c); c=getchar()) if(c=='-') f=0;
for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+(c^'0');
if(f) return x;
return 0-x;
}
int n,q;
ll a[N+3],s[N+3],lim[N+3];
int main(){
n=read(), s[0]=read();
for(int i=1; i<=n; i++){
a[i]=read();
s[i]=min(abs(s[i-1]-a[i]),s[i-1]);
}
lim[n+1]=0;
for(int i=n; i>=1; i--){
if(lim[i+1]>=a[i]/2) lim[i]=lim[i+1]+a[i];
else lim[i]=lim[i+1];
}
q=read(); int x;
while(q--) x=read(), puts(lim[x+1]<s[x-1]?"YES":"NO");
return 0;
}
【ARC072 E】Alice in linear land的更多相关文章
- 【ARC072E】Alice in linear land DP
题目大意 有一个人要去直线上\(lm\)远处的地方,他会依次给他的机器发出\(n\)个指令.第\(i\)个指令为\(d_i\).他的机器收到一个指令\(x\)后,如果向目的地方向前进\(xm\)后比当 ...
- 【ARC072E】Alice in linear land
题目 瑟瑟发抖,这竟然只是个蓝题 题意大概就是初始在\(0\),要到坐标为\(D\)的地方去,有\(n\)条指令,第\(i\)条为\(d_i\).当收到一条指令\(x\)后,如果向\(D\)方向走\( ...
- 【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 ...
- [AT2401] [arc072_e] Alice in linear land
题目链接 AtCoder:https://arc072.contest.atcoder.jp/tasks/arc072_c 洛谷:https://www.luogu.org/problemnew/sh ...
- ARC072E Alice in linear land
---题面--- 题解: 首先我们要观察到一个性质,因为在固定的起始距离下,经过固定的操作,最后所在的位置是固定的,我们设经过操作1 ~ i之后所在的地方距离终点为d[i]. 那么如果女巫可以修改第i ...
- AtCoder Regular Contest 072 E:Alice in linear land
题目传送门:https://arc072.contest.atcoder.jp/tasks/arc072_c 题目翻译 给你一个数组\(D\),然后给你一个操作序列\(d\),每次操作可以将\(D\) ...
- 【深度学习】线性回归(Linear Regression)——原理、均方损失、小批量随机梯度下降
1. 线性回归 回归(regression)问题指一类为一个或多个自变量与因变量之间关系建模的方法,通常用来表示输入和输出之间的关系. 机器学习领域中多数问题都与预测相关,当我们想预测一个数值时,就会 ...
- 【POJ 1698】Alice's Chance(二分图多重匹配)
http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...
- Atcoder Regular Contest 072 C - Alice in linear land(思维题)
Atcoder 题面传送门 & 洛谷题面传送门 首先求出 \(s_i\) 表示经过 \(i\) 次操作后机器人会位于什么位置,显然 \(s_0=D\),\(s_i=\min(s_{i-1},| ...
随机推荐
- Elasticsearch unassigned 故障排查
1. 故障分析与排查 一个 Elasticsearch 集群至少包括一个节点和一个索引.或者它 可能有一百个数据节点.三个单独的主节点,以及一小打客户端节点--这些共同操作一千个索引(以及上万个分片) ...
- [机器学习理论] 降维算法PCA、SVD(部分内容,有待更新)
几个概念 正交矩阵 在矩阵论中,正交矩阵(orthogonal matrix)是一个方块矩阵,其元素为实数,而且行向量与列向量皆为正交的单位向量,使得该矩阵的转置矩阵为其逆矩阵: 其中,为单位矩阵. ...
- Apache——开启个人用户主页功能
个人主页功能分为不加密和加密两种 不加密: 先来建立几个用户,我这是建了两个 例:命令为:useradd qiyuan 然后输入:passwd qiyuan,改一下密码 我们看一下家目录下面: 已经 ...
- 判断屏幕宽度px大小鉴别是移动设备或者PC
if(window.matchMedia("(max-width: 767px)").matches){ alert("这是一个移动设备.");}else { ...
- SQLServer启动和关闭bat脚本
原文:SQLServer启动和关闭bat脚本 安装完毕SQL SERVER 2005后,会默认自动启动SQL Server等几个服务,这几个服务比较占用系统资源.当不运行SQL Server时,最 ...
- redis 工具包
java通过jedis操作redis(从JedisPool到JedisCluster) redis作为一个缓存数据库,在绝大多数java项目开发中是必须使用的,在web项目中,直接配合spring-r ...
- 《深入理解 Java 虚拟机》学习 -- 垃圾回收算法
<深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方 ...
- hdu 5651 重复全排列+逆元
知识点: n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列. 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni! ...
- sql server 多条数据字段合并及创建临时表 FOR XML PATH
SELECT 字段=(SELECT b.合并字段+',' FROM 表一 AS b WHERE b.相同条件=a.相同条件 FOR XML PATH('')) FROM 表一 AS a DECLARE ...
- vue导航栏制作
1,在components新建commnn目录,然后再新建nav目录,在此目录下新建nav-bottom.vue文件和nav-item.vue文件 2,nav-bottom.vue中的内容: < ...