题目链接
题解
又是一道神题,,
我们考虑一些简单的情况:
我们先假设
\(b_i\)单调不降,而不是递增
对于递增序列
\(\{a_i\}\),显然答案
\(\{b_i\}\)满足
\(b_i = a_i\) 对于递减序列
\(\{a_i\}\),显然答案
\(\{b_i\}\)满足
\(b_i\)为
\(a_i\)的中位数
于是我们有了初步的想法:
将
\(a_i\)分成若干个单调递减的段,每段的答案为其中位数
然后顺次访问段
如果两段的答案是递增的,显然这两段就没有影响,相互独立了,就保留答案
如果相邻两段的答案是递减的,就合并这两段,重新寻找它们的中位数
可以证明是对的 对于单调递增的处理,我们只需令\(A[i] = A[i] - i\),即可转变为单调不下降
维护中位数可以用对顶堆实现,由于涉及堆的合并,那就使用左偏树
#include #include #include #include #include #include