zoukankan      html  css  js  c++  java
  • 【arc072e】AtCoder Regular Contest 072 E

    题意

    给定一个D,以及一个长度为N的序列a,顺序执行这些数字:
    对于一个数字x,会使得D=min(D,abs(D-x))

    有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0.

    n,q<=500000

    解法

    我们设Low[i],表示当前D执行i+1..n的数字之后,不为0的最小值。

    我们知道,对于每一次询问i,
    求出前i-1个数字执行后的结果D,
    通过修改a[i],我们可以使得D变成[1,D],

    那么如果D>=Low[i+1]就回答"YES",否则回答"NO"。

    现在问题变成了怎样求出Low数组,

    [边界:Low[n+1]=1, Low[i]=Low[i+1]+a[i]*(a[i]<2*Low[i+1])]

    当a[i]<2*Low[i+1]时,这次的数字操作有效,
    为了走到Low[i+1],所以Low[i]要加上a[i].

  • 相关阅读:
    string类
    拓扑排序 图
    麦森数,高精度快速幂
    排列
    牛客练习赛28 B 数据结构
    牛客练习赛27 C-水图
    组合数
    树状数组
    k短路模板+例题
    Supreme Number(找规律,打表)
  • 原文地址:https://www.cnblogs.com/hiweibolu/p/8487821.html
Copyright © 2011-2022 走看看