A, B, C, D, E

略。

F

考虑每次合并两个子树, 定义一个合并 Tag (rest, max_merge) 表示子树里面有多少点, 最多可以合并出来多少对, 这个 Tag 支持合并, 直接合并即可。

G1, G2

这题有非常显然的线段树优化建图的做法。

看了一眼 Jiangly 代码, 发现有个哈希, 突然发现原来每个颜色只会出现两次, 那么序列就是若干不相交的段, 对于一个分段点, 这个前缀中每个数出现次数应该都是恰好一次。 答案就是分段点的个数, 每个段里面选法其实是固定了一些颜色的一些点, 但是先后选无所谓, 把这些点拿出来, 点个数乘积就是答案,