11.15 联测

A

先找找有什么通解。发现找不太到。

考虑直接构造,每个点 iiilowbit(i)i-lowbit(i) 连边。

容易发现会有大约 logn\log n 个点的 ilowbit(i)<li-lowbit(i)<l。也就是有若干个连通块。

考虑暴力对这些点跑 kruscal,复杂度 O(qlog2nloglog2n)O(q\log^2n\log\log^2n)

打表发现跑出来的生成树一定满足 ll 向其他点连边,复杂度将为 qlognq\log n


B

直接朴素 dp,O(n2)O(n^2)

数据结构优化,线段树上 trjtr_j 表示下一个区间选了 [j,i][j,i] 的贡献。

[j,i][j,i] 非法,trj=0tr_j=0。反之 trj=fjtr_j=f_j

维护两颗线段树,表示重要位置在奇/偶数下标。

  • 如果 ii 不是重要节点,那么 j[1,lsti]j\in[1,lst_i] 不能选。

  • 如果 ii 是重要节点,那么 j[1,prei,1o][prei,o+1,i]j\in [1,pre_{i,1-o}] \cup [pre_{i,o}+1,i] 不能选。

    注意撤销 [preprei,o,o+1,prei,o][pre_{pre_{i,o},o}+1,pre_{i,o}] 的标记。

扫一遍 ii 的同时将 fif_i 加进线段树即可。