求一下最长数字连续上升的子序列长度,n-长度就是答案
O(n)可以出解,dp[i]=dp[i-1]+1,然后找到dp数组最大的值。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int INF=0x7FFFFFFF; const int maxn=100000+10; int dp[maxn]; int n,x; int main() { while(~scanf("%d",&n)) { memset(dp,0,sizeof dp); for(int i=1; i<=n; i++) { scanf("%d",&x); dp[x]=dp[x-1]+1; } int ans=-INF; for(int i=1; i<=n; i++) if(dp[i]>ans) ans=dp[i]; printf("%d ",n-ans); } return 0; }