最酷的排列
idea,sol,data,std from Kubic
别急。
下面是 Rainbow_sjy 代更。
首先我们只需要考虑相邻元素的交换。
从后往前扫,最终位置
用小根堆维护后缀中的数,碰到酷的位置,就弹出最小的计入答案。这个答案是下界,而且是可以构造得到的。
里外一致
idea from cmk666,solution from zjy0001。
记区间
考虑构造形式幂级数
考虑记
接下来观察模数的性质,因为
对于
否则,对于
如果用扫描线配合树状数组求出
二维抄袭检测
idea,data,std from unputdownable, solution from unputdownable,zhoukangyang
一个点只有两个出边。
如果两者字符不一样,那么直接走对应字符的出边就行。
难处理的是两条出边字符相等的情况。
但是
总复杂度
贪心失效了!真的失效了吗?
考虑我们的贪心什么时候会挂。
注意到如果在蓝色分支之前就往下拐,一定不比蓝色优,否则蓝色一定能接到那个路径上去。
所以应该选择最后一个能往下拐的位置往下拐,然后就是
注意到能往下拐的位置一定满足
记得在两种贪心中取较大的一个。
总复杂度仍是
贪心还有救吗?
这样子可以把上述贪心卡死。
但是如果能找到一个直达第三排的位置,从那个位置往下拐贪一下,就还有救。
因为考虑所有从第二行转移到第三行的列,如果这一列的第一行无法到达,那么可以被走完第一行再接
而当我们找到一个能直达第三行的位置,和
观察到能到第三排的位置应该满足
将走完第一行再接
总复杂度仍是
对于询问暴力跑一个朴素的 DP,记
总复杂度
注意到 DP 状态只有
总复杂度
贪心彻底没救了,因为此时路径的形态会变得相当复杂。
注意到
首先将矩阵转换为斜矩阵以方便理解(第
维护 DP,第
难点在于转移矩阵会随着询问的字符串而改变。
想办法固定每个位置的转移矩阵。
注意到如果先贪心在第一行匹配,那么在和第一行匹配上的这个区间内,转移矩阵是固定的。
直接动态 DP 维护此时的 DP 状态;如果下面的行已经没有可达的位置了,那么贪心匹配第一行一定是最优的;否则跳到下方第一个可以到达的行,然后递归。
预处理动态 DP 矩阵,查询时只需要做至多
视实现的不同复杂度大约
注意到矩阵很小,可以压位,单次矩乘
上猫树,注意到每次乘的是单个转移矩阵,而不是若干转移矩阵的积,其中非
这样预处理时单次矩乘
复杂度
由于实测时间瓶颈在
谢罪
部分乱搞获得了