下笔春蚕食叶声。

题解 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_r\ge 0\)\(s_l\le a_r,s_l\)增加 \(1\)

(显然,当且仅当\(a_r\ge 0\)\(s_l\le a_r,s_l\) 可以增加 \(1\)

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


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

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

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

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


时间复杂度:\(O(n\log^2 n+q\log n)\)

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

可以通过本题。

posted @ 2020-11-11 21:41  ACwisher  阅读(66)  评论(0编辑  收藏  举报