题解 CF2165F Arctic Acquisition
题解 CF2165F Arctic Acquisition
其他题
感谢出题人解答了我的一些弱智问题。
题意
定义一个序列为锯齿状的,当且仅当其存在一个长度为
给定一个长度为
数据范围:多测,
做法
谁家好人线段树题开
我**的做了 2h 没做出来看眼提示让我扫描线,直接天塌了。只能说过于菜,没一眼秒掉,一旦开始长考基本上就倒闭了。
锯齿状的五个点画出来大约是这样的:
下面说的“第
首先容易想到的是枚举左端点并求出最靠左的右端点,然后拿这些极小的区间求所有不合法的情况(即包含它们中的任意一个就爆了)。
一旦左端点定了那首先第二个点肯定选右边第一个比它小的,因为从图中可以看出来第二个点的值对后面的点不构成限制(因为第一个点的值更大),但下标是有限制的,所以一定是越靠左越好。这个搞棵权值线段树倒着扫一下预处理出来就行。
接下来对后三个点的考虑还是十分常规地当成整体。此时我们对后三个点的限制就是第四个点要大于第一个点且第三个点要在第二个点后面,于是考虑维护所有“第三个点”“第四个点”能找到的最小“第五个点”,那原问题就变成一个二维数点了。
但直接维护所有的情况是
题解里那个图是拿来证明的,而且前两种情况一眼可以合并。考虑用一个值在“第四个点”以上、值在“第四个点”“第五个点”之间的点来更新现有的后三个点。
- 新点的值在原“第三个点”以上时,将原“第五个点”替换为新点仍然合法,而这种情况是更优的。
- 新点的值在原“第三个点”以下时,将原“第四个点”替换为新点仍然合法,而这种情况是更优的。
综上结论是正确的。
证明了结论正确后就可以同样用线段树解决问题了。复杂度就是线段树的复杂度即