考虑一个排列的反排列($p_i=a$,则$q_a=i$,q为p的反排列)。元排列的问题就能变为在反排列中每次交换相邻的两个数,并且它们要满足差不小于k,使得最终1的位置尽量靠前,然后2的位置尽量靠前,依此类推。
记元排列为P,反排列为Q,最小字典序的Q一定对应最小字典序的P,求出最小字典序后在i前面的数一定都是比i小或者比i大但位置差小于k且在原来Q中就在i前面的数。这样的话就能建一张图表示最终排列里的前后位置关系,然后求这个图的最小字典序的一个拓扑序即可。
如果每个点都这样建边的话那就是$n^2$的了,每个点只需要向前后最先满足条件的点建边即可,其他的其实不需要。
|
|