做题记录 26.3.4

QOJ #10202. Exotic … Ancient City

对于一个 \(1\le i\le m\),令 \(C_w\) 表示取 \(n\times i\) 的网格中边权 \(\le w\) 的边构成的子图的连通块数量,则生成树中边权为 \(w\) 的边数量为 \(C_w-C_{w-1}\),从而答案为 \(\sum_w (C_w-C_{w-1})\)

问题转化为给定一个边集,对于每种宽度的子图求出连通块数量

枚举 \(i=1\sim m\),考虑每增加一个时连通块数量的增量

等于 \(n\) 减去新加入的边所产生的连通块合并的数量

\(1\sim i-1\) 部分的结构,此时已经有一部分左端点之间形成连通块,之后再次加入边集产生一部分合并

调换两者顺序,并维护此过程导致的增量(增量的增量)

可做到 \(O(n\alpha(n)\omega)\)

代码

参考

\(\textcolor{purple}\odot\) P6242 【模板】线段树 3(区间最值操作、区间历史最值)

模板题

不考虑历史最值,则每个结点维护:最大值,次大值,最大值数量,总和,非最大值加法标记,最大值加法标记

加入历史最值,则额外维护:非最大值加法标记的历史最大值(从上一次下传之后,下同),最大值加法标记的历史最大值

时间复杂度 \(O(m\log^ 2n)\)

代码

posted @ 2026-03-05 06:43  Hstry  阅读(2)  评论(0)    收藏  举报