CF1805E There Should Be a Lot of Maximums

CF1805E

看到维护树上问题,可以想到线段树合并。

但直接维护显然不行,要一点技巧。

发现 $val$ 的出现次数 $cnt_{val}$ 如果 $\ge 3$,那么一定是一个候选项,若 $cnt_{val} = 1$,那么一定不能作为候选项。

于是可以用权值线段树维护对于 $val$ 有 $cnt_{val} = 2$ 的 $val$。先离散化,然后再合并线段树。查找时,若右子节点的 $\max = 2$ 或右子节点的 $\min = 0$,就递归查找右节点,反之亦然。若左右子节点都不满足,就返回 $0$,实现需要一点细节。

空间只需要开 $32$ 倍。

时间复杂度:$\mathcal{O}(n\log n)$。

评测记录

最后提供一组 hack:

输入:

10 
1 2
1 3
1 4
1 5
1 6
2 7
2 8
3 9
4 10
1 3 3 3 3 4 10 4 6 2

输出:

3
4
4
4
3
4
3
4
4
posted @ 2023-04-17 13:31  Pengzt  阅读(4)  评论(0编辑  收藏  举报  来源