[DP]ARC072E Alice in linear land
Description
爱丽丝·玛格特洛伊德居住在幻想乡里的一条直线上。今天,她打算驾驶一台神秘仪器,去往直线上的某些地方。一开始,她与目的地的距离是D。当她往神秘仪器中输入一个数x时,它会朝着目的地方向前进x的距离。这台神秘仪器有一个特性,如果它意识到朝着目的地行驶x的距离会导致爱丽丝离目的地的距离更远(即跨过了目的地,并行驶了更长的一段距离),它会选择拒绝指令,保持原地不动。举个例子,当爱丽丝与目的地的距离是3时,如果她给仪器下达2的指令,距离会变成1;如果下达5的指令,距离会变成2(跨过了目的地后又前进了2);如果下达了8的指令,则会原地不动,距离依然是3。
爱丽丝做了一个旅行计划,计划包含N个整数d1,d2,...,dN,表示爱丽丝依次给机器下达的指令。然而,幻想乡中居住着另一名邪恶的黑白色的魔法使(?),她打算偷偷修改爱丽丝的旅行计划,使得爱丽丝无法到达目的地。邪恶魔法使有Q个计划,每次计划对应一个qi,表示她要改变爱丽丝计划中的第qi个数。注意这Q个计划之间是两两无关的,每次修改都是直接改变原序列。
为了拯救幻想乡的和(核)平日常,请你判断魔法使的每个计划能否得逞。
Input
输入第一行包含两个整数N和D。
输入第二行包含N个整数d1,d2,...,dN。
输入第三行包含一个整数Q。
输入第四行包含Q个整数q1,q2,...,qQ
Output
输出包含Q行,如果第i个计划能取得成功,第i行输出字符串"YES",否则输出"NO"。
Sample Input
## Sample Input 1
4 10
3 4 3 3
2
4 3
## Sample Input 2
5 9
4 4 2 3 2
5
1 4 2 3 5
## Sample Input 3
6 15
4 3 5 4 2 1
6
1 2 3 4 5 6
Sample Output
## Sample Output 1
NO
YES
## Sample Output 2
YES
YES
YES
YES
YES
## Sample Output 3
NO
NO
YES
NO
NO
YES
HINT
1≤N,Q≤5×1e5
1≤D,di≤1e9
1≤qi≤N
有40分的子任务满足1≤N≤100,1≤D,di≤10000。
分析
首先执行完第i个命令的距离值递推式为$dist[i]=min(dist[i-1],|dist[i-1]-d[i]|)$
不难想到,当第i个命令能够使她无法到达时,那么i+1至n中,能够到达的距离值从1开始的连续区间的右端点值一定小于dist[i-1]
那么这个值怎么递推呢?
设其为f,有$f[i]=d[i]<=2*f[i+1]+1?f[i+1]+d[i]:f[i+1]$
最后直接判断即可
#include <iostream> #include <cstdio> using namespace std; typedef long long ll; const int N=5e5+10; int n,q; ll d[N],m[N],p[N]; ll Abs(ll a) {return a<0?-a:a;} int main() { freopen("A.in","r",stdin); freopen("A.out","w",stdout); scanf("%d%lld",&n,&d[0]);m[0]=d[0]; for (int i=1;i<=n;i++) scanf("%lld",&d[i]),m[i]=min(m[i-1],Abs(m[i-1]-d[i])); for (int i=n;i;i--) { p[i]=p[i+1]; if (d[i]<=(p[i]<<1)+1) p[i]+=d[i]; } for (scanf("%d",&q);q;q--) { int i; scanf("%d",&i); printf(m[i-1]>p[i+1]?"YES\n":"NO\n"); } }
Description
爱丽丝做了一个旅行计划,计划包含N个整数d1,d2,...,dN,表示爱丽丝依次给机器下达的指令。然而,幻想乡中居住着另一名邪恶的黑白色的魔法使(?),她打算偷偷修改爱丽丝的旅行计划,使得爱丽丝无法到达目的地。邪恶魔法使有Q个计划,每次计划对应一个qi,表示她要改变爱丽丝计划中的第qi个数。注意这Q个计划之间是两两无关的,每次修改都是直接改变原序列。
为了拯救幻想乡的和(核)平日常,请你判断魔法使的每个计划能否得逞。
Input
输入第二行包含N个整数d1,d2,...,dN。
输入第三行包含一个整数Q。
输入第四行包含Q个整数q1,q2,...,qQ
Output
Sample Input
## Sample Input 1
4 10
3 4 3 3
2
4 3
## Sample Input 2
5 9
4 4 2 3 2
5
1 4 2 3 5
## Sample Input 3
6 15
4 3 5 4 2 1
6
1 2 3 4 5 6
Sample Output
## Sample Output 1
NO
YES
## Sample Output 2
YES
YES
YES
YES
YES
## Sample Output 3
NO
NO
YES
NO
NO
YES
HINT
1≤N,Q≤5×105
1≤D,di≤109
1≤qi≤N
有40分的子任务满足1≤N≤100,1≤D,di≤10000。