CF1793D 题解

由于给的是个排列,做法是从 $1$ 到 $n$ 去考虑每个数会作为多少个区间缺少的数中的最小值。我们的顺序是从 $1$ 开始从小到大。

首先,我们能通过映射得到 $ia$ 以及 $ib$ 也就是当前数值分别在 $p$ 和 $q$ 两个数组中的位置。

接着可得缺少当前值 $x$ 的区间必定是不包含 $ia$ 和 $ib$ 两个位置的区间,而这样的区间的个数可以通过计算得到,比如说一个 $n$ 是 $7$ 的序列,数值 $1$ 在第一个排列中位于 $4$ 的位置,在第二个排列中位于 $6$ 的位置,那么合法的区间就是 $1 \le l,r < 4$ 以及 $4 < l,r < 6$ 和 $6 < l,r \le 7$ 的。

最后要考虑怎么使 $i$ 变成没出现过的正整数中最小的,我们只需要区间包含 $1$ 到 $i-1$ 中的所有数即可。

别忘加上 $l=1$ 且 $r=n$ 的情况,最小没出现过的正整数是 $n+1$ 所以对答案有 $1$ 的贡献。

代码

posted @ 2023-02-13 20:51  徐子洋  阅读(25)  评论(0)    收藏  举报  来源