省选模拟70

A. 小 Y 增员操直播群

  如果我们将区间合并的过程看做一棵树,那么答案就是树的深度。

  考虑检验一个区间是否可能是树上的一个节点,那么只要判断这个区间能否分成两个区间即可。

  考虑找到较小的区间的长度。在区间的左端点处查询区间内的最靠右的两个配对的点,那么这两个点的差就是区间长度。

  特判一下两个区间长度一样即可。

B. 小 J 真爱粉交流群

  首先 可以发现,第二个人的作用是决定第一个人从哪一个位置下去,所以墙的位置必然是一段连续区间。

  考虑dp。令$f[i][l][r]$表示当前在$[l+1,r]$有墙,当前棋子在$l$的最优解。同理令$g[i][l][r]$表示当前$[l,r-1]$有墙,棋子在$r$的最优解。

  那么考虑转移,当前是第二个人做决定,所以他可以决定当前要不要在下面放墙。假如放,那么另外一个人会选择走到两边没有墙的位置。

  然后直接转移就行了。

C. 青青草原播种计划

  对于任意子集的mex,有一个结论是,假设mex为$x$,$x$为第一个满足所有小于等于$x$的数加和为$x-1$的数。

  有了这个结论就很好做了,前面几个操作可以用显然的可持久化线段树来维护,合并的操作只要线段树合并就行。

  然后对于查询,找到历史版本对应的线段树的根节点,然后暴力跳,显然跳的次数不会超过log次。

  复杂度$O(nlog^2n)$

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12701424.html