本题教训我们: 如果遇到在返回值域范围的dp时,可以考虑线段树合并操作. 考虑最开始写作一个\(if:0;end\) 那么所有的\(if\)可以记作一个树状结构,\(set\)为子节点 先把所有\(set\ s\)指令删除,代价提前至点上. 考虑在树上\(dp\),那么我们需要的是\(f_{i,j}\)即操作完 \(i\) 内的子程序后,返回值为 \(j\) 的最小代价. 那么可以线段树合并操作. 但是由于这个子节点之间的顺序有差别,所以这里可以采用顺序访问子节点而后map启发式合并. 复杂度较…