2017-10-5模拟赛T2 小Z爱排序(sorting.*)

Description


Solution


比赛时找到了规律,但是没有证出来……(当然最后还是AC了……)

显然没有被操作的数在排好序的序列中一定是连续的一段。

所以,没有被操作的数一定从左到右连续地递增(例如23456)。

而题目要求被操作的数尽量少,就是没有被操作的数尽可能多,找到满足条件的最长的一段就可以了。


例如,对于数据1 4 5 3 2 6 7 9 8,最长的一段为45678,所以最少操作次数为4。

附方法:

3放前=>314526798

2放前=>231456798

1放前=>123456798

9放后=>123456789


言归正传,找出这个最长的一段的长度len,则n-len即为答案。

类似动态规划,对于第i个数a,如果a!=1且前面出现a-1(可以用数组维护),那么f[i]=f[出现a-1的位置]+1,否则f[i]=1。则答案为n-f[n]。复杂度O(n)。


拓展:

①如果题目要求找出方法呢?(当然得有spj)

②如果不是1~n的排列而是可以有重复的数呢?

Code


404 Not Found
View Code
原文地址:https://www.cnblogs.com/hotwords/p/7749651.html