题解:P4477 [BJWC2018] 基础匹配算法练习题
只有询问无修改,于是考虑莫队维护
容易发现对于每个
对于这种连续区间,我们考虑使用线段树维护之。维护三个信息:
-
答案
ans ; -
-
匹配成功的
b_i 区间大小bsiz 。
具体而言:
-
增加:尽可能地向右子树寻找
a_i 以使得a_i 最大化,若最后匹配得了且是「最佳位置」,那么令ans+1 ,bsiz+1 ; -
删除:最后若
b_i 先前有匹配,则令ans-1 ,bsiz-1 。
pushup 时:
综上,本题是莫队与线段树的结合,其中莫队为整体框架,线段树处理寻找匹配与计算贡献的问题,并且让我们学会了只有询问考虑莫队、以及连续区间问题考虑线段树的技巧。时间复杂度