CF1408H Rainbow Triples 题解

· · 题解

:::::info[题目基本信息] 考察:图论,贪心,线段树(3300)。
题目简介:
给定 \{a_n\},求 m 的最大值使得存在 m 个三元组 (x_i,y_i,z_i) 满足:

数据范围:

直接暴力跑匹配可以做到 \Theta(n^{2.5}\log n) 的复杂度,但是和正解几乎一点关系没有。
我们考虑观察一下一个颜色所连的点有什么特点,注意到一个位置要么左 0 全在他的左边,要么右 0 全在他的右边,那么分别只需要满足 \displaystyle\sum_{i=1}^{pos-1}[a_i=0]\ge pos\displaystyle\sum_{i=pos+1}^n[a_i=0]\ge n-pos+1 即可,那么对于任意一个位置,他可以作为一段前缀或一段后缀,那么全部并起来就会变成一段前缀和一段后缀。
唉这不就是 ARC076F 吗,那个题的时间复杂度是 \Theta(n\log n) 的(具体见 我的题解),那么我们的时间复杂度是 \Theta(n\log^2n) 的,可能能过去但是我被卡了。
然后我们考虑去掉二分的 log,我们注意到这个二分屁用没有,因为有多少右部点是不影响答案的,所以我们直接把二分扔掉,然后我们就解决了此题。

时间复杂度为 \Theta(n\log n),空间复杂度为 \Theta(n)

code