Atcoder Regular Contest 072 C - Alice in linear land(思维题)
首先求出 \(s_i\) 表示经过 \(i\) 次操作后机器人会位于什么位置,显然 \(s_0=D\),\(s_i=\min(s_{i-1},|s_{i-1}-a_i|)\)。
考虑修改某个位置的 \(a_i\) 的本质是什么。注意到不论你将 \(a_i\) 改为什么值,最终的 \(s_i\) 一定在 \([0,s_{i-1}]\) 中,也就是说我们需求出是否 \(\exist v\in [0,s_{i-1}]\) 使得将 \(s_i\) 改为 \(v\) 后经过 \(i+1\sim n\) 这 \(n-i\) 次操作,得到的值非零。
考虑二元函数 \(f(v,a[1\dots n])\) 表示 \(v\) 经过 \(a_1,a_2,\dots,a_n\) 的作用下得到的值。那么题目转化为是否 \(\exist v\in [0,s_{i-1}]\) 使得 \(f(v,a[i+1\dots n])\neq 0\)。我们考虑分析这个 \(f\) 函数的性质,首先非常明显的一点是 \(\forall v,f(v,a[1\dots n])\leq f(v+1,a[1\dots n])\),证明异常容易,考虑序列 \(s_0=v,s_i=\min(s_{i-1},|s_{i-1}-a_i|)\),以及序列 \(s'_0=v+1,s'_i=\min(s'_{i-1},|s'_{i-1}-a_i|)\),随便归纳一下就可以得到 \(s_i\leq s'_i\),故 \(s_n\leq s'_n\)。另一个需要注意到的地方是这里 \(0\) 的特殊性,u1s1 感觉很多题目都要用到 \(0\) 这样特殊的数的性质解题(譬如 CF258E),这个地方连 ycx 神仙都没想到。注意到 \(\forall v\geq 0\),\(f(v,a[1\dots n])\geq 0\),而 \(f(0,a[1\dots n])=0\),再结合前一个性质可知满足 \(f(v,a[1\dots n])=0\) 是一个形如 \([0,g]\) 的区间,也就是说最小的满足 \(f(v,a[1\dots n])\neq 0\) 的 \(v\) 为 \(g+1\)。
这样一来思路就有了。考虑设 \(g_i\) 表示满足 \(f(v,a[i\dots n])\neq 0\) 的最小的 \(v\)。显然 \(g_{n+1}=1,g_i\geq g_{i+1}\),考虑递推求出 \(g_i\),对于某个 \(i\) 我们有 \(f(g,a[i\dots n])>0\Leftrightarrow f(\min(g-a_{i},g),a[i+1\dots n])>0\)。这样就可以分情况讨论了,若 \(|g_{i+1}-a_{i+1}|\ge g_{i+1}\),那么 \(g_{i}=g_{i+1}\) 就符合条件,否则 \(\min(g_i,|g_i-a_{i+1}|)=g_i-a_{i+1}\),而我们要使得 \(g_i-a_{i+1}\geq g_{i+1}\),故 \(g_i=a_{i+1}+g_{i+1}\)。
时间复杂度线性。
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define fill0(a) memset(a,0,sizeof(a))
#define fill1(a) memset(a,-1,sizeof(a))
#define fillbig(a) memset(a,63,sizeof(a))
#define pb push_back
#define ppb pop_back
#define mp make_pair
template<typename T1,typename T2> void chkmin(T1 &x,T2 y){if(x>y) x=y;}
template<typename T1,typename T2> void chkmax(T1 &x,T2 y){if(x<y) x=y;}
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
namespace fastio{
#define FILE_SIZE 1<<23
char rbuf[FILE_SIZE],*p1=rbuf,*p2=rbuf,wbuf[FILE_SIZE],*p3=wbuf;
inline char getc(){return p1==p2&&(p2=(p1=rbuf)+fread(rbuf,1,FILE_SIZE,stdin),p1==p2)?-1:*p1++;}
inline void putc(char x){(*p3++=x);}
template<typename T> void read(T &x){
x=0;char c=getchar();T neg=0;
while(!isdigit(c)) neg|=!(c^'-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
if(neg) x=(~x)+1;
}
template<typename T> void recursive_print(T x){if(!x) return;recursive_print(x/10);putc(x%10^48);}
template<typename T> void print(T x){if(!x) putc('0');if(x<0) putc('-'),x=~x+1;recursive_print(x);}
void print_final(){fwrite(wbuf,1,p3-wbuf,stdout);}
}
const int MAXN=5e5;
int n,qu,a[MAXN+5],b[MAXN+5];
int main(){
scanf("%d%d",&n,&a[0]);b[n+1]=1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=n;i;i--) b[i]=(b[i+1]<=a[i]/2)?b[i+1]:b[i+1]+a[i];
for(int i=1;i<=n;i++) a[i]=min(a[i-1],abs(a[i-1]-a[i]));
scanf("%d",&qu);while(qu--){int x;scanf("%d",&x);printf("%s\n",(a[x-1]>=b[x+1])?"YES":"NO");}
return 0;
}
Atcoder Regular Contest 072 C - Alice in linear land(思维题)的更多相关文章
- 【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 ...
- AtCoder Regular Contest 072 E:Alice in linear land
题目传送门:https://arc072.contest.atcoder.jp/tasks/arc072_c 题目翻译 给你一个数组\(D\),然后给你一个操作序列\(d\),每次操作可以将\(D\) ...
- 【arc072f】AtCoder Regular Contest 072 F - Dam
题意 有一个体积为L的水池,有N天 每天早上进水Vi体积的Ti温度的水. 每天晚上可以放掉任意体积的水. 问每天中午,水池满的情况下,水温最高多少. 水的温度只受新加进的谁的影响,对于水\(W1(T1 ...
- Atcoder Grand Contest 005 E - Sugigma: The Showdown(思维题)
洛谷题面传送门 & Atcoder 题面传送门 记先手移动棋子的树为红树,后手移动棋子的树为蓝树. 首先考虑一个性质,就是如果与当前红色棋子所在的点相连的边中存在一条边,满足这条边的两个端点在 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
随机推荐
- oo第一次博客-三次表达式求导的总结与反思
一.问题回顾与基本设计思路 三次作业依次是多项式表达式求导,多项式.三角函数混合求导,基于三角函数和多项式的嵌套表达式求导. 第一次作业想法很简单,根据指导书,我们可以发现表达式是由各个项与项之间的运 ...
- 必备的60个常用的Linux命令
Linux必学的60个命令Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在Linux系统上工作离不开使用系统提供的命令. ...
- 集合先从ArrayList开始
本篇文章非常建议直接从经典Demo开始哦~ 一.ArrayList简介 ArrayList 的底层是数组队列,相当于动态数组.与 Java 中的数组相比,它的容量能动态增长.在添加大量元素前,应用程序 ...
- Linkerd 2:5 分种厘清 Service Mesh 相关术语
API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...
- 数字孪生 3D 科技馆的科学传播新模式
前言 科技馆是一种参与型体验型的博物馆,以传播科学知识.培养公众的科学创新技术为宗旨,并以其生动的展现方式得到公众的广泛欢迎.一直以来,我国科技馆的发展受到各种因素的制约和影响,发展缓慢.如今在我国经 ...
- Django 开发------django-crontab实现服务端的定时任务
一.需求: 想实现类似 Linux 中crontab 的功能.定时执行计划任务. 二.配置: a.安装插件: # pip3 install django-crontab b.在settings.py ...
- JSON数据和Java对象的相互转换
JSON解析器: 常见的解析器: Jsonlib, Gson, fastjson, jackson 其中应用最广泛的是jackson,阿里的fastjson虽然比jackson快一点,但存在的问题比较 ...
- axios 基于拦截器的取消(重复)请求
axios 基于拦截器的取消(重复)请求 // 添加请求拦截器 axios.interceptors.request.use((config) => { // 准备发请求之前, 取消未完成的请求 ...
- 聊聊sql优化的15个小技巧
前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它 ...
- 解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件
本文图文讲解如何解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件. 默认打开IDEA的Plugins会加载很久,最后什么也没加载出来. 这时我们可以给插件市场设置 ...