dp求一下最长的等差数列,其余数字向前向后移动,就排好序了。
#include<bits/stdc++.h>
using namespace std;
const int MAXN=50050;
int a[MAXN],dp[MAXN];
int main()
{
int n,i,ans;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
ans=0;
for(i=1;i<=n;i++)
{
dp[a[i]]=dp[a[i]-1]+1;
ans=max(ans,dp[a[i]]);
}
printf("%d\n",n-ans);
}
}