[CF 392 Div.1 D]Three Arrays

题意

给三个由(n)个数组成的数组(A)(B)(C),找一个最小的(a+b+c)使得(A)(B)(C)的对应前(a)(b)(c)个元素的并集恰好和(A)(B)(C)的并集相同
(1leq nleq {10}^6)

分析

我看课件上面描述的题意是这些数组是(1cdots n)的排列……不过反正做法差不多。

考虑这种题目一般套路都是枚举一维,然后考虑剩下的。考虑枚举一个(a),判定最小的(b+c),我们对于每一个数(i),考虑将其视作若干个点对((pB_i,pC_i)),此时我们需要包含所有点的目标等价于找最大的(pB_i)(pC_i)而已……

然后这个题目就很简单了,我们考虑对每个(A)里面的位置稍微处理一下当前这个位置的数是不是第一次出现,然后从后往前往表里面加(当然在最后的时候还需要将其他里面有但是这个里面没有的加进去)

感觉可以稍微换一下出成另一个题目,要求并集大小不小于某个(K),这样感觉上就是类似在一条折线上的维护,这条折线上的点包含的都恰好(K)个,然后加某个点进去会使得这一段“下陷”,实际上也就相当于一个类似维护凸壳之类的东西。不难发现,这里我们维护的这个下凸壳,因为我们某个点加进去之后肯定只会最多被“经过”一次(就是折线跨过去),那么我们完全可以找出这个点影响了哪一段区间的答案(这一段的折线需要下移),然后暴力找其中的若干个区间(因为某个点的覆盖使得区间中的一部分答案得到贡献)并直接向下覆盖即可。

原文地址:https://www.cnblogs.com/wendavid/p/9205421.html