题解 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))

可以通过本题。

原文地址:https://www.cnblogs.com/zdsrs060330/p/13961140.html