0%

UOJ346 【清华集训2017】某位歌姬的故事

Sol

分开考虑 $h$ 不同的限制。每个的位置的值在包含它的、 $h$ 最小的限制那里确定。

对于某个确定的 $h$ ,如果有两个限制满足 $l_1\le l_2\le r_2\le r_1$ 的,只保留 $[l_2,r_2]$ 就可以了(注意最后要给答案乘上给 $[l_1,l_2)\cup (r_2,r_1]$ 赋值的方案数)。这样处理以后,限制的区间的左右端点都是单调的。

然后,将区间按照端点位置排序之后,考虑极长的、相邻的两个区间都有交的段,对每个段单独统计方案数。

考虑容斥(即区间内所有数都 $\le h$ 的方案数 - 区间内所有数都 $\le h-1$ 的方案数)。设 $f_{i,j}$ 为考虑了前 $i$ 个区间、上一个要求所有数 $\le h-1$ 的区间右端点是 $j$ 时,给 $\le j$ 的位置赋值的方案数 * 对应的容斥系数。每次枚举下一个要求所有数 $\le h-1$ 的区间是谁进行转移即可。

Code

link