做题首先应该发掘性质,这里的性质很显然,对于正确答案而言肯定是按照右端点排序。
然后我就走偏了。
考虑正难则反,算相同的方案数。
注意到当相同的时候,正确答案和错误答案一定是一一对应的。
这个题看起来就很像 DP,那我们就要找子结构,找阶段。
好的我们现在想要做的是找其充要条件,这要求我们手玩。
我们通过手玩发现对于正确答案(红),错误答案(蓝),其他区间(黑)而言,所有的区间的左端点必须在蓝内。然后在两个红的右端点之间的右端点的左端点必须比较小的那个红的右端点小。
然后我们发现其实这个限制更有排序需求的是右端点,然后我们按照右端点排序,于是很自然想到以红色的右端点为阶段。
这个一个很好的性质是在一个阶段内,黑色的线段的左端点是一个排列,右端点在一定范围内完全无限制。
那从左到右还是从右到左?这个其实不一定,我们试了一下发现从右到左更好做。
然后这里是一个不平凡的观察,我们可以把蓝线段拆开来,右端点在上个阶段里确定,左端点在这个阶段里确定。
此时我们就对红色的左端点与两个蓝色的分界线的相对位置进行分类讨论。我们每次枚举这个阶段里的黑色左端点有多少个。然后把右端点任意插入。
不过我们还要考虑红蓝是同一个线段的情况,我们开两个数组即可。
直接转移并卡点常即可获得 100。时间复杂度 $O(n^2)$。