A
略
B
考虑两个栈合并,第二个栈的贡献可以直接算
然后要用第二个栈的 去找到第一个 它的位置算贡献
枚举这个位置算 它的 有多少个就可以了
C
注意到每次就是抠出来一个集合 ,它的补集填一种颜色
首先这样操作一定是合法的(充分性)
下面证必要性:只需证明合法的染色方案一定存在 使得包涵 的集合为同一种颜色
若不存在 ,设 为全集且为黑色,那么我们考虑所有为白色的集合
由于包涵 的集合中两个颜色都有,所以 一定为白色
那么基于这个进行 就可以了
D
注意到第一次出现的位置单调不降
设 为 在两个序列里最后出现的位置
那么若 则不合法
若 中有 中没有的数那么不合法
我们从后往前构造,此时将 变成
容易知道 之后一定有个
所以我们可以把 之前的 都变成 然后把 变成
A
容易发现答案为
归纳,若最先合并 或者不是,二者是对称的
B
一位一位确定,设当前有 个 ,有 个没有填的 的
先钦定 然后相当于是 个可以 放 个空位
设 个 可以 的放 个空位的方案数为
故
C
考虑 怎么做,容易发现最大匹配为 , 为左右非零度点个数
于是可以做背包
考虑如何最小化最大匹配,由 定理,最大匹配为
我们现在知道每个点的度数,要构造一个图使最大匹配最小
那么我们一定会选左边几个度数最小的点,找到右边几个度数最大的点连过去
记 为集合 的度数和
即
容易发现只需要在背包里面记录
因为最优解一定可以取到且非法解一定不会取到
复杂度
D
考虑倍增,要用 次
注意到找到最大的 使得 查出来是 但 查出来不是
那么 查出来的就是答案,二分一下只用 次