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
时间: 2024-10-14 16:06:58