码迷,mamicode.com
首页 > 其他好文 > 详细

[CF 392 Div.1 D]Three Arrays

时间:2018-06-20 21:31:19      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:排列   出现   完全   div   最大的   array   就是   暴力   这一   

题意

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

分析

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

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

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

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

[CF 392 Div.1 D]Three Arrays

标签:排列   出现   完全   div   最大的   array   就是   暴力   这一   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!