agc061_c 容斥+dp

题意

有两个长度为 \(n\) 的严格递增序列 \(A_i,B_i\),满足 \(\forall i\le n,A_i < B_i\),且 \(A_i\)\(B_i\) 的所有元素恰好取遍 \(1-2n\)。现在有一个队列,对于 \(1\)\(n\) 每个数 \(i\),既可以在 \(A_i\) 时刻加入队尾,也可以在 \(B_i\) 时刻加入队尾,问最终能形成多少种不同的队列。

解答

对于每个元素 \(i\),假若某一个最终形成的队列与 \(i\) 加入队列的时刻无关(此时该元素称为钦定元素),则所有满足 \(B_j > A_i\)\(j\) 都只能在 \(A_j\) 时刻入队,所有满足 \(A_j < B_i\)\(j\) 都只能在 \(B_j\) 时刻入队,记满足 \(A_j < B_i\) 的最大的 \(j\)\(L_i\),满足 \(A_j < B_i\) 的最大的 \(j\)\(R_i\),则每个 \(i\) 对应了一个区间 \([L_i, R_i]\),区间内的每个元素的选择方式都是固定的。

对于两个钦定元素元素 \(i_1, i_2\) ,易知其对应的的区间是不交的。

考虑容斥,每次钦定一个集合,那么集合内每个元素对应的区间都不交,不在这些区间内的数都视为任意交换都会形成一种新方案,这样的方案数为 \(2^k\)\(k\) 为非钦定元素数量),容斥的话,每个钦定的集合 \(S\) 对应的权值就是 \((-1)^{|S|}2^k\)

那么就是一个简单的 \(O(n)\) dp了。

\(f_i\) 表示仅考虑前 \(i\) 个数的所有方案权值之和,那么遍历 \(1-n\) 每个数,当前遍历到 \(i\) 时。

\(f_i += 2f_{i-1}\) (加入空元素)

$f_{R_i} += -f_{L_i-1} $(加入对应区间)

posted @ 2023-02-17 00:19  wiki0922  阅读(25)  评论(0编辑  收藏  举报