被智商题劝退,告辞

题意

  有一个人在一条数轴的距离原点为 \(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的更多相关文章

  1. 【ARC072E】Alice in linear land DP

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

  2. 【ARC072E】Alice in linear land

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

  3. 【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 ...

  4. [AT2401] [arc072_e] Alice in linear land

    题目链接 AtCoder:https://arc072.contest.atcoder.jp/tasks/arc072_c 洛谷:https://www.luogu.org/problemnew/sh ...

  5. ARC072E Alice in linear land

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

  6. AtCoder Regular Contest 072 E:Alice in linear land

    题目传送门:https://arc072.contest.atcoder.jp/tasks/arc072_c 题目翻译 给你一个数组\(D\),然后给你一个操作序列\(d\),每次操作可以将\(D\) ...

  7. 【深度学习】线性回归(Linear Regression)——原理、均方损失、小批量随机梯度下降

    1. 线性回归 回归(regression)问题指一类为一个或多个自变量与因变量之间关系建模的方法,通常用来表示输入和输出之间的关系. 机器学习领域中多数问题都与预测相关,当我们想预测一个数值时,就会 ...

  8. 【POJ 1698】Alice's Chance(二分图多重匹配)

    http://poj.org/problem?id=1698 电影和日子匹配,电影可以匹配多个日子. 最多有maxw*7个日子. 二分图多重匹配完,检查一下是否每个电影都匹配了要求的日子那么多. #i ...

  9. Atcoder Regular Contest 072 C - Alice in linear land(思维题)

    Atcoder 题面传送门 & 洛谷题面传送门 首先求出 \(s_i\) 表示经过 \(i\) 次操作后机器人会位于什么位置,显然 \(s_0=D\),\(s_i=\min(s_{i-1},| ...

随机推荐

  1. 【HTML】常用的标签学习

    HTML(HyperText Markup Language )又称超文本标记语言,与一般文本文件不同的是它是由各种标签或标记组成 <标签名></标签名> .所以html的学习 ...

  2. Summary of OAuth 2.0

    Summary of OAuth 2.0 1 Problems: This pattern of applications obtaining user passwords obviously has ...

  3. git常用命令总结——覆盖日常开发全操作

    前言:Git是目前世界上最先进的分布式版本控制系统,对的,最先进! 1. 版本库,又名仓库,repository 可理解成一个目录,目录里的所有文件都可被Git管理,Git可以跟踪每个文件的修改.删除 ...

  4. ESXi 制作模板并优化 Centos

    1.修改网络配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 #编辑network配置文件修改以下两项 (eth1同理) ONBOOT=yes BOOTP ...

  5. Apollo分布式部署总结

    环境 操作系统为centOS7 Apollo服务端为Java版本为1.8 MySQL5.8.x 环境DEV 注意事项 按文档安装config与admin的数据库,并修改相关配置 在修改Apollo P ...

  6. [转帖]NM_CONTROLLED的含义以及网卡配置参数

    NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. ...

  7. centos 7 cloudera-manager5.16.2,CDH5.16.2安装升级spark2.4.0

    1.在已经安装好系统的linux服务器上关闭selinux和iptables 2.在所有linux服务器上配置ntp服务并设置ntp时间同步 3.在所有linux服务器上安装好cm和cdh版本所需要对 ...

  8. Kudu建表语句

    --建表CREATE TABLE kudu_testdb.perf_test_t1( id string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY, int ...

  9. Synchronize和ReentrantLock区别

    转自:https://blog.csdn.net/m0_37700275/article/details/83151850 目录介绍1.Synchronize和ReentrantLock区别 1.1 ...

  10. 史上最全的MySQL高性能优化实战总结!

    1.1 前言 MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多 ...