这道题问最少移动多少步使其序列,从小到大排序。正难则反,我们可以求最长严格递增的子序列。用n-最长就是答案。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int dp[maxn],n,ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int m;
scanf("%d",&m);
dp[m]=dp[m-1]+1;
ans=max(dp[m],ans);
}
printf("%d\n",n-ans);
}