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
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
404 Not Found