P10241 [THUSC 2021] 白兰地厅的西瓜

考虑 DP,注意到一个简单路径可以被拆为向上的部分和向下的部分。所以设 \(f_{u,i}\) 表示 \(u\) 的子树中从 \(u\) 向下且第一项是 \(i\) 的 LIS 的最大长度,\(g_{u,i}\) 表示 \(u\) 的子树中 \(u\) 的某个子孙向上到 \(u\) 且最后一项是 \(i\) 的 LIS 的最大长度。

\(u\) 到父亲 \(fa\),转移考虑将 \(a_{fa}\) 作为 LIS 的开头或结尾:

\(\max_{i=a_{fa}+1}^nf_{u,i}+1\to f_{fa,a_{fa}}\)

\(\max_{i=1}^{a_{fa}-1}g_{u,i}+1\to g_{fa,a_{fa}}\)

于是可以对每个节点用线段树维护 \(f\)\(g\),从 \(u\) 转移到 \(fa\) 只需要先将 \(u\) 的线段树用上面的转移方程进行修改,再直接合并到 \(fa\) 的线段树上即可。统计答案时,考虑在合并 \(u\) 之前 (此时 \(fa\) 的线段树维护的线段树维护的是只考虑从前几个儿子上来的 LIS 时的 \(f\)\(g\))更新答案,有 \(f_{u,i}+\max_{j<i}g_{fa,j}\to ans\)
\(g_{fa,i}+\max_{j<i}g_{u,j}\to ans\)。实际实现时,同时从\(u\)\(fa\)的线段树向下走,每次用
\(\max f_{lson[fa]}+\max g_{rson[u]}\)更新答案即可,这是经典的线段树合并套路。

posted @ 2024-04-30 15:45  jxy2012  阅读(39)  评论(0)    收藏  举报
//雪花飘落效果