倍增处理次大值的时候,如果两个子区间的最大值不相等,那么次大值可能是剩下的那个最大值以及两个子区间的次大值。
即
Max[i][cur] = max(lef, rig), _Max[i][cur] = min(lef, rig);
要写成
Max[i][cur] = max(lef, rig), _Max[i][cur] = max({lef + rig - Max[i][cur], _Max[i - 1][cur], _Max[i - 1][fa[i - 1][cur]]});