给 $n$条线段 $[l_i,r_i]$
每条有个颜色 $t_i\in\{0,1\}$求最多选出多少条线段,使没有不同颜色的线段相交。
显然离散化,以$r_i$排好序。
设$dp[r_i][1/0]$表示以$r$结尾。
$count(l,r,1)$表示$[l,r]$里面的$1$线段数量。
后面这部分$dp[x][0]+count(x+1,r_i,1)$发现可以在线段树上维护。
每个$[l_i,r_i],t_i$的线段,都会$x\in[1,l_i-1]$的$dp[x] [ ! t]+1$
然后每次更新维护下自身以及取最大值即可
$O(n\log n)$
代码
1 |
|