长乐集训 - NOI模拟赛(三十三)「订正未完成」
没交
$\text{score:NULL rk:NULL}$
Problem A:区间第k小题面
题解先考虑离线,整体二分,二分答案 $mid$,处理所有 $\le mid$ 的数,那么此时问题就转化为在区间出现次数不超过 $w$ 的数有多少个
不妨关注每个数对询问区间 $[L, R]$ 的贡献,对某个数 $a$,若它是从左往右后 $w$ 个出现为 $a$ 的数,则它的贡献为 $1$,若为倒数第 $w + 1$ 个则贡献为 $- w$,剩下的贡献都为 $0$,那么我们就可以开一个队列,首先总大小(即不删去超过 $w$ 的)算出来,此时计算需要删去的,队列大小未到 $w$ 时没有需要删的,若大于 $w$ 时每次就让队首点贡献减去 $w + 1$,当然之前多减的还要加回来
那么现在就可以考虑从离线转成在线,在整体二分的过程中每一层(即每一次二分的 $[l, r]$)都会建一些可持久化线段树,而它又最多会修改 $O (n \log n)$ 次,开 $O (n \log^2 n)$ 个节点,所以把每一层的可持久化线段树都存下来,在线二分时即可直接查找,总时间复杂度 $O ...