第一眼想法是 ans=min(n-最长下降子序列,n-最长上升子序列)
然后发现找到的子序列相邻两位必须是相差 1 的
然后搞一下就好了(没考虑下降的貌似还是过了)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,x,ans;
int dp[50005];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",&x);
dp[x]=dp[x-1]+1;
ans=max(ans,dp[x]);
}
printf("%d",n-ans);
return 0;
}