转化问题:
用(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))
可以通过本题。