题目链接
做法
考虑两个箱子如果进出栈时间呈嵌套关系,则这两个箱子就不能在同一个栈中。
考虑对于这种嵌套关系的两个箱子连一条边,最后的图中的二分图的方案数即总方案数。
如果暴力连边,那么边数可达 $ n^2 $ 个,显然过不去。
观察我们目前的连边方案:对于一个物品 $ u $ ,它会和之前物品序列中一段连续的物品 $ v1, v2, \dots, vk $ 连边。此时 $ v1, v2, \dots, vk $ 都是连通且同色的。
那么如果下一轮的连边的范围和 $ v1, v2, \dots, vk $ 有交,那么由连通性,这些边其实只连一条就够了。
具体地,对于每个左端点,我们对其维护一个 $ nxt $ ,表示如果现在再对它进行连边,应该跳到哪里。这样连边的数量就会减少很多,且不改变二分性和连通性。
最后 $ dfs $ 染色即可。时间复杂度 $ O(n \log n) $ 。
1 |
|