题意
有两个长度为 \(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} $(加入对应区间)
标签:每个,队列,钦定,元素,容斥,agc061,区间,dp From: https://www.cnblogs.com/0922-Blog/p/agc061_c.html