zoukankan      html  css  js  c++  java
  • 题解 CF1404C 【Fixed Point Removal】

    转化问题:

    (i-a_i) 代替 (a_i)

    新的操作变为:去掉一个0,然后将之后的元素-1。

    对于每个提问,记录(l=1+x,r=n-y)

    将提问按照 (r) 再按照 (l) 排序以便于查询。


    (f(l,r)) 维护子序列 (a[l...r]) 中可以移除的元素的最大数量。

    (r)(1) 变化到 (n) ,始终维护每个 (l) 的答案:
    (f(1,r),f(2,r)...f(n,r))

    (s_i=f(i,r))

    出现一个新元素 (a_r) 时,如果 (a_rge 0)(s_lle a_r,s_l)增加 (1)

    (显然,当且仅当(a_rge 0)(s_lle a_r,s_l) 可以增加 (1)

    否则要么就是(a_r<0)显然不可能 或者之前的0个数不够,(a_r) 还没有来得及减到 (0)


    (lmax) 是最大的 (l) 使得 (lle r)(s_{lmax}ge a_r),将以 (lmax) 结尾的前缀 (+1)

    由定义可得,(s_1≥…≥s_{lmax}≥a_r>s_{lmax+1}≥…≥s_n) s单调递减。

    二分寻找 (lmax) ( (s) 单调递减)。

    使用 差分+树状数组 维护 (s) 数组。


    时间复杂度:(O(nlog^2 n+qlog n))

    空间复杂度:(O(n))

    可以通过本题。

  • 相关阅读:
    第10组 Beta冲刺 (4/5)
    第10组 Beta冲刺 (3/5)
    第10组 Beta冲刺 (2/5)
    第10组 beta冲刺(1/5)
    软工实践个人总结
    第01组 每周小结(3/3))
    第01组 每周小结(2/3)
    第01组 每周小结 (1/3)
    第01组 beta冲刺总结
    第01组 beta冲刺(5/5)
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/13961140.html
Copyright © 2011-2022 走看看